关注小程序 找一找教程网-随时随地学编程

Python教程

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 Engine):引擎负责控制数据流在系统中所有组件中流动,并在相应动作发生时触发事件。
  • 管道(Pipline):主要提供存储服务,把需要存储的数据存储到相关数据库之中。
  • 调度器(Scheduler):主要提供两个功能,分别是 去重 和 队列。
  • 下载器(Downloader):下载器负责获取页面数据并提供给引擎,而后提供给spider。
  • 爬虫(Spiders):Spider是Scrapy用户编写用于分析response并提取item(即获取到的item)或额外跟进的URL的类。 每个spider负责处理一个特定(或一些)网站。

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

2.1 安装 Scrapy

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

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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

您可能喜欢