scrapy分页抓取网页(2021-09-051Scrapy(绿线向)2Scrapy的运作流程)
优采云 发布时间: 2022-01-29 01:07scrapy分页抓取网页(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
分类:
技术要点:
相关文章: