scrapy分页抓取网页(2021-09-051Scrapy(绿线向)2Scrapy的运作流程)

优采云 发布时间: 2022-01-29 01:07

  scrapy分页抓取网页(2021-09-051Scrapy(绿线向)2Scrapy的运作流程)

  2021-09-051 Scrapy架构图(绿线为数据流)

  

  2 Scrapy操作流程

  代码写好了,程序开始运行了……

  发动机:嗨!蜘蛛,你在对付哪个网站?蜘蛛:老板要我处理。引擎:给我第一个需要处理的 URL。Spider:在这里,第一个 URL 是。发动机:嗨!调度员,我有一个请求,请求您帮我排序并加入队列。调度程序:好的,正在处理您等一下。发动机:嗨!调度员,给我你处理的请求。调度器:给你,这是我处理的请求引擎:嗨!下载器,请帮我按照老板下载中间件的设置下载这个请求下载器:OK!给你,这是下载的东西。(如果失败:对不起,这个请求下载失败。然后引擎告诉调度器这个请求下载失败,你记录一下,我们稍后下载) 引擎:你好!蜘蛛,这是一个下载的东西,已经按照老大的下载中间件进行了处理,大家可以自行处理!这里,响应默认由def parse()处理) Spider:(处理数据后需要跟进的URL),Hi!Engine,我这里有两个结果,这是我需要跟进的URL,这是我得到的Item数据。发动机:嗨!我这里有一件物品,请帮我处理!调度器!这个是需要你跟进的网址帮我处理的。然后从第四步开始循环,直到得到boss需要的所有信息。Pipes ``调度器:好的,现在就做!(处理数据后需要跟进的URL),您好!Engine,我这里有两个结果,这是我需要跟进的URL,这是我得到的Item数据。发动机:嗨!我这里有一件物品,请帮我处理!调度器!这个是需要你跟进的网址帮我处理的。然后从第四步开始循环,直到得到boss需要的所有信息。Pipes ``调度器:好的,现在就做!(处理数据后需要跟进的URL),您好!Engine,我这里有两个结果,这是我需要跟进的URL,这是我得到的Item数据。发动机:嗨!我这里有一件物品,请帮我处理!调度器!这个是需要你跟进的网址帮我处理的。然后从第四步开始循环,直到得到boss需要的所有信息。Pipes ``调度器:好的,现在就做!

  注意!只有当调度器中没有请求时,整个程序才会停止,(即对于下载失败的URL,Scrapy也会重新下载。)

  3 Scrapy安装介绍

   1、安装wheel pip3 install wheel

2、安装lxml pip3 install lxml-4.2.1-cp36-cp36m-win_amd64.whl

3、安装pyopenssl (已安装就不需要安装)

4、安装Twisted pip3 install Twisted-18.4.0-cp36-cp36m-win_amd64.whl

5、安装pywin32 pip3 install pypiwin32

6、安装scrapy pip3 install scrapy

或者pip3 install Scrapy-1.5.0-py2.py3-none-any.whl

  Scrapy框架官网:

  Scrapy中文维护网站:

  Windows安装方式Ubuntu需要9.10以上的安装方式

  安装完成后,只要在命令终端输入scrapy,就会出现类似如下的结果,说明已经安装成功

  具体Scrapy安装过程参考:每个平台都有安装方法

  4 制作一个Scrapy爬虫一共需要4个步骤:

  新建爬虫项目

  scrapy startproject mySpider

进入该目录 cd mySpider

scrapy genspider stack http://stackoverflow.com/ #创建一个爬虫stack 指定爬取路径

  明确目标(编写items.py):明确你要捕获的目标(目标信息以类和字段的形式实现)

  制作爬虫(spiders/xxspider.py):制作爬虫并开始爬取网页(实现主要逻辑的地方并返回item)

  存储内容(pipelines.py):设计管道存储爬取内容(接受item,一般重写几个常用方法(open_spider、process_item、close_spider)

  启动爬虫项目

  命令开始:scrapy crawl spidername(爬虫名称)

  文件开始

  from scrapy import cmdline

# 方式一:注意execute的参数类型为一个列表

cmdline.execute('scrapy crawl spidername'.split())

# 方式二:注意execute的参数类型为一个列表

cmdline.execute(['scrapy', 'crawl', 'spidername'])

  5 入门案例一.新建项目(scrapy startproject)

  scrapy startproject mySpider

  

  下面简单介绍一下各个主文件的作用:

  scrapy.cfg :项目的配置文件

  mySpider/ :项目的 Python 模块,将从中引用代码

  mySpider/items.py :项目的目标文件

  mySpider/pipelines.py :项目的管道文件

  mySpider/settings.py :项目的设置文件

  mySpider/spiders/ : 蜘蛛代码存放的目录

  二、明确目标 (mySpider/items.py)

  我们打算抓取:网站 中的邮箱。

  打开mySpider目录下的items.pyItem,定义一个结构化的数据字段,用来保存爬取的数据,类似于dict,但是提供了一些额外的保护来减少错误。可以通过创建一个scrapy.Item类并定义一个scrapy.Field类型的类属性来定义一个Item(可以理解为一种类似于ORM的映射关系)。接下来,创建一个 TianyaItem 类并构建项目模型。

  import scrapy

class TianyaItem(scrapy.Item):

email = scrapy.Field() #只定义爬取email字段

  三、制作蜘蛛 (spiders/itcastSpider.py)

  爬虫功能分为两步:

  1. 爬取数据

  scrapy genspider mytianya "bbs.tianya.cn" #指定爬虫文件名 爬取的域名

  import scrapy

import re

from tianya import items

class MytianyaSpider(scrapy.Spider):

name = 'mytianya'

allowed_domains = ['bbs.tianya.cn']

start_urls = ['http://bbs.tianya.cn/post-140-393977-1.shtml']

#主要的逻辑模块

def parse(self, response):

pass

  其实我们也可以自己创建itcast.py,自己写上面的代码,但是使用命令可以省去写固定代码的麻烦

  要创建 Spider,您必须继承 scrapy.Spider 类并定义三个强制属性和一个方法。

  修改 parse() 方法

   def parse(self, response):

html = response.body.decode()

# [email protected]

email = re.compile(r"([A-Z0-9_][email protected][A-Z0-9]+\.[A-Z]{2,4})", re.I)

emailList = email.findall(html)

mydict = []

for e in emailList:

item = items.TianyaItem()

item["email"] = e

# mydict[e] = "http://bbs.tianya.cn/post-140-393977-1.shtml"

mydict.append(item)

return mydict

  然后运行看看,在mySpider目录下执行:

  scrapy crawl mytianya

  2.scrapy保存信息有四种最简单的保存方式,-o输出指定格式的文件,命令如下:

  scrapy crawl mytianya -o mytianya.json

scrapy crawl mytianya -o mytianya.csv

scrapy crawl mytianya -o mytianya.xml

  什么产量在这里:

   def parse(self, response):

html = response.body.decode()

# [email protected]

email = re.compile(r"([A-Z0-9_][email protected][A-Z0-9]+.[A-Z]{2,4})", re.I)

emailList = email.findall(html)

mydict = []

for e in emailList:

item = items.TianyaItem()

item["email"] = e

yield mydict #得到*敏*感*词*对象,每循环一次,返回一个item

  分类:

  技术要点:

  相关文章:

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线