其他分享
首页 > 其他分享> > Python逆向爬虫之scrapy框架,非常详细

Python逆向爬虫之scrapy框架,非常详细

作者:互联网

一、爬虫入门

那么,我相信初学的小伙伴现在一定是似懂非懂的。那么下面我们通过一个案例来慢慢进行分析

首先,我们第一步需要做的就是项目分析,我们来看看爬取这个网站我们需要哪些步骤。

1.1 定义需求

需求就是将该网站中所有的美女图片分类下载到本地。

1.2 需求分析

如果我们需要下载上面所表示的所有的图片的话,我们需要如下几个步骤:

  1. 下载某个页面上所有的图片
  2. 分页
  3. 进行下载图片

1.2.1 下载某个页面上所有的图片


 
  # -*- coding: utf-8 -*-
   
  import requests
  from lxml import etree
   
  import urllib3
  urllib3.disable_warnings()
   
  def getClassification(num):
  """
  获取分类链接
  :return:
  """
   
  url = f"https://www.quanjing.com/tupian/meinv-{num}.html"
   
  html = sendRequest(url, "get")
   
  htmlValus = htmlAnalysis(html.text, '//*[@id="gallery-list"]/li')
   
  for item in htmlValus:
  imgUrl = item.xpath('./a/img/@src')[0]
  downLoad(imgUrl)
   
  def downLoad(url):
   
  """
  下载图片
  :param url:
  :return:
  """
   
  img = sendRequest(url)
   
  imgName = url.split("@")[0].split("/")[-1]
   
  with open("./quanjing/" + imgName, 'wb') as imgValue:
  imgValue.write(img.content)
   
  def htmlAnalysis(html, rule):
   
  """
  根据 xpath 获取数据
  :param html:
  :param rule:
  :return:
  """
   
  htmlValues = etree.HTML(html)
   
  value = htmlValues.xpath(rule)
   
  return value
   
   
  def sendRequest(url, method="get"):
  """
  发送请求
  :param url:
  :param method:
  :return:
  """
  if method.lower() == "get":
  html = requests.get(url=url, headers=getHeader(), verify=False)
  elif method.lower() == "post":
  html = requests.post(url=url, headers=getHeader())
  else:
  html = None
   
  return html
   
   
  def getHeader():
  """
  获取Header
  :return:
  """
   
  ua_headers = {
  "User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36',
  "referer": "https://www.quanjing.com/"
  }
   
  return ua_headers
   
   
  def main():
  getClassification(1)
   
   
  if __name__ == '__main__':
  main()
   

1.2.2 分页


 
  def main():
  for i in range(10):
  getClassification(i)
   

1.2.3 进行下载图片


 
  def downLoad(url):
   
  """
  下载图片
  :param url:
  :return:
  """
   
  img = sendRequest(url)
   
  imgName = url.split("@")[0].split("/")[-1]
   
  with open("./quanjing/" + imgName, 'wb') as imgValue:
  imgValue.write(img.content)
   

二、Scrapy 入门

Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。

其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的, 也可以应用在获取API所返回的数据(例如 Amazon Associates Web Services ) 或者通用的网络爬虫。

上面的架构图明确的说明了 Scrapy 主要有 5 个部分。

其实除了上述的内容外,Scrapy 还提供一些中间件,例如:下载器中间件(Downloader Middlewares)和爬虫中间件(Spider Middlewares)等。

2.1 安装 Scrapy

在命令行模式下使用pip命令即可安装。

标签:Python,爬虫,案列使用,网页,提取信息,Xpath,语言,属性,结果,函数
来源: