网页数据抓取软件(基于Twisted的异步处理框架,纯python实现的爬虫框架 )

优采云 发布时间: 2022-03-02 20:16

  网页数据抓取软件(基于Twisted的异步处理框架,纯python实现的爬虫框架

)

  Scrapy是一个基于Twisted的异步处理框架,纯python实现的爬虫框架。用户只需要自定义开发几个模块,就可以轻松实现一个爬虫抓取网站数据,提取结构化数据和各种图片,非常方便。Scrapy 常用于数据挖掘、信息处理或存储历史数据等一系列程序中。虽然 Scrapy 最初是为屏幕抓取(更准确地说是网页抓取)而设计的,但它也可以用于访问 API 以提取数据。

  

  如何安装?

  打开 网站:

  ~gohlke/pythonlibs/

  在这个python第三方库中下载三个包:lxml、twisted、scrapy。

  我下载的是:

  lxml-4.3.2-cp37-cp37m-win_amd64.whlScrapy-1.6.0-py2.py3-none-any.whlTwisted-18.9.0-cp37-cp37m-win_amd64.whl

  cd到这三个包所在的文件夹,然后pip3依次安装上面三个.whl文件。

  例如:

  pip3 install lxml-4.3.2-cp37-cp37m-win_amd64.whlpip3 install Twisted-18.9.0-cp37-cp37m-win_amd64.whlpip3 install Scrapy-1.6.0-py2.py3-none-any.whl

  全部安装完成后,直接在命令行输入scrapy,看看是否出现如下提示。如果出现,则安装成功。

  Scrapy 1.6.0 - no active project

Usage: scrapy [options] [args]

Available commands: bench Run quick benchmark test fetch Fetch a URL using the Scrapy downloader genspider Generate new spider using pre-defined templates runspider Run a self-contained spider (without creating a project) settings Get settings values shell Interactive scraping console startproject Create new project version Print Scrapy version view Open URL in browser, as seen by Scrapy

[ more ] More commands available when run from project directory

Use "scrapy  -h" to see more info about a command

  如果不成功,请从以下网址下载对应的win插件。

  221/

  架构和流程

  Scrapy 使用 Twisted 异步网络库来处理网络通信。整体结构大致如下

  

  Scrapy主要包括以下组件:

  用于处理整个系统的数据流,触发事务(框架核心)

  它用于接受引擎发送的请求,将其推入队列,并在引擎再次请求时返回。它可以被认为是 URL(被爬取的网站或链接)的优先级队列,它决定了下一个请求。抓取的网址是什么,同时删除重复的网址

  用于下载网页内容并将网页内容返回给spider(Scrapy下载器建立在twisted的高效异步模型之上)

  爬虫主要用于从特定网页中提取它需要的信息,即所谓的实体(Item)。用户也可以从中提取链接,让 Scrapy 继续爬取下一页

  它负责处理爬虫从网页中提取的实体。主要功能是持久化实体,验证实体的有效性,去除不必要的信息。当页面被爬虫解析后,会被发送到项目流水线中,并按照几个特定的​​顺序对数据进行处理。

  Scrapy 引擎和下载器之间的框架主要处理 Scrapy 引擎和下载器之间的请求和响应。

  Scrapy引擎和爬虫之间的一个框架,主要工作是处理蜘蛛的响应输入和请求输出。

  Scrapy 引擎和调度器之间的中间件,从 Scrapy 引擎发送到调度器的请求和响应。

  Scrapy运行过程大致如下:

  引擎从调度程序中获取链接(URL)以进行下一次抓取

  引擎将 URL 封装为请求发送给下载器

  下载器下载资源并封装成响应包(Response)

  爬虫解析Response

  解析出实体(Item),然后交给实体管道做进一步处理

  如果解析的是链接(URL),则将该URL交给调度器等待抓取

  如何开始?

  制作 Scrapy 爬虫有四个步骤:

  新建项目:新建爬虫项目

  明确目标(写items.py):指定你要抓取的目标

  创建爬虫(spiders/xxspider.py):创建爬虫开始爬网

  存储内容(pipelines.py):设计管道来存储爬取的内容

  豆瓣阅读频道图书信息爬取

  

  创建项目

  scrapy startproject pic

  创建爬虫

  cd picscrapy genspider book douban.com

  自动创建目录和文件

  

  文件描述:

  注意:一般在创建爬虫文件时,以网站的域名命名

  设置数据存储模板

  项目.py

  ​​​​​​​

  import scrapyclass PicItem(scrapy.Item): addr = scrapy.Field() name = scrapy.Field()

  写爬虫

  书本.py

  # -*- coding: utf-8 -*-import scrapyimport os# 导入item中结构化数据模板from pic.items import PicItem

class XhSpider(scrapy.Spider): # 爬虫名称,唯一 name = "book" # 允许访问的域 allowed_domains = ["douban.com"] # 初始URL start_urls = ['https://book.douban.com/']

def parse(self, response): # 获取所有图片的a标签 allPics = response.xpath('//div[@class="cover"]/a') for pic in allPics: # 分别处理每个图片,取出名称及地址 item = PicItem() name = pic.xpath('./img/@alt').extract()[0] addr = pic.xpath('./img/@src').extract()[0] item['name'] = name item['addr'] = addr # 返回爬取到的数据 yield item

  设置配置文件

  settings.py 添加如下内容

  ​​​​​​​

  ITEM_PIPELINES = {'pic.pipelines.PicPipeline':100}USER_AGENT = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'

  编写数据处理脚本

  管道.py

  ​​​​​​​

  import urllib.requestimport os

class PicPipeline(object): def process_item(self, item, spider): headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0'} req = urllib.request.Request(url=item['addr'],headers=headers) res = urllib.request.urlopen(req) file_name = os.path.join(r'down_pic',item['name']+'.jpg') with open(file_name,'wb') as fp: fp.write(res.read())

  执行爬虫

  scrapy crawl book --nolog

  结果

  

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线