一、Scrapy
Scrapy 是用 Python 实现的一个为了爬取网站数据、提取结构性数据而编写的应用框架。 Scrapy 常应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。 通常我们可以很简单的通过Scrapy 框架实现一个爬虫,抓取指定网站的内容或图片。
二、Scrapy架构图(绿线是数据流向)
Scrapy Engine(引擎 ): 负责Spider、ItemPipeline、Downloader、Scheduler 中间的通讯,信号、数据传递等。
Scheduler(调度器 ): 它负责接受引擎发送过来的Request请求,并按照一定的 方式进行整理排 列,入队,当引擎需要时,交还给引擎。
Downloader (下载器):负责下载Scrapy Engine(引擎)发送的所有Requests 请求,并将其 获取到的Responses交还给Scrapy Engine(引擎),由引擎交给Spider 来处理,
Spider (爬虫):它负责处理所有Responses,从中分析提取数据,获取Item字 段需要的数 据,并将需要跟进的URL提交给引擎,再次Scheduler(调度器).
Item Pipeline(管道):它负责处理Spider中获取到的Item,并进行进行后期处 理(详细分析、 过滤、存储等)的地方。
Downloader Middlewares (下载中间件):你可以当作是一个可以自定义扩 展下载功能的组件。
Spider Middlewares(Spider 中间件):你可以理解为是一个可以自定扩展 和操作引擎和 Spider中间通信的功能组件(比如进入Spider的Responses;和从 Spider出去的Requests)
三、Scrapy 的运作流程
代码写好,程序开始运行…
1 引擎:Hi!Spider, 你要处理哪一个网站?
2 Spider:老大要我处理xxxx.com。
3 引擎:你把第一个需要处理的URL给我吧。
4 Spider:给你,第一个URL是xxxxxxx.com。
5 引擎:Hi!调度器,我这有request请求你帮我排序入队一下。
6 调度器:好的,正在处理你等一下。
7 引擎:Hi!调度器,把你处理好的request请求给我。
8 调度器:给你,这是我处理好的request
9 引擎:Hi!下载器,你按照老大的下载中间件的设置帮我下载一下这个 request请求
10 下载器:好的!给你,这是下载好的东西。(如果失败:sorry,这个 request下载失败了。然
后引擎告诉调度器,这个request下载失败了,你记录一 下,我们待会儿再下载)
11 引擎:Hi!Spider,这是下载好的东西,并且已经按照老大的下载中间件处 理过了,你自己处
理一下(注意!这儿responses默认是交给def parse()这个函数处 理的)
12 Spider:(处理完毕数据之后对于需要跟进的URL),Hi!引擎,我这里有 两个结果,这个是我
需要跟进的URL,还有这个是我获取到的Item数据。
13 引擎:Hi !管道 我这儿有个item你帮我处理一下!调度器!这是需要跟进 URL你帮我处理下。
然后从第四步开始循环,直到获取完老大需要全部信息。
14 管道调度器:好的,现在就做!
注意!只有当调度器中不存在任何request了,整个程序才会停止,(也就是说,对于下载 失败的 URL**,Scrapy也会重新下载。)**
四、制作Scrapy爬虫步骤
1 、安装Scrapy框架
pip install scrapy
- 1
2、创建一个爬虫项目
scrapy startproject SpiderDemo(项目名)
- 1
3、进入项目,创建一个爬虫样例
cd SpiderDemo 先进入项目
scrapy genspider example example.com 创建爬虫样例,会出现example.py样例文件
- 1
- 2
样例代码解析
4、启动爬虫
在启动之前需要关闭robot协议 settings 文件下: ROBOTSTXT\_OBEY = true改为false
启动名为 example 的爬虫 **scrapy crawl example**
- 1
- 2
- 3
5、文件的作用
items.py: 表示定义一些获取数据的结构信息
middlewares.py: 表示自定义中间处理过程
pipelines.py: 用来存储及处理数据
settings.py : 用来设置当前的爬虫 生成的
example.py: 用来写我们请求及处理过程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
五、实例
1、创建文件
在spiderDemo/spiders中新建一个文件JDCommentSpider
2、准备工作
寻找url,copy
找header,点击文件后,点击headers,下滑到最下面
2、代码实例
import scrapy
import re
import json
# 创建一个爬虫程序jdpc,定义类名jdpc,并且继承scrapy.Spider
class jdpc(scrapy.Spider):
# 给爬虫创建名称
name = 'jdpc'
# 设置允许的域名
allowed_domains = ['club.jd.com']
header = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.74 Safari/537.36"
}
# 重写我们父类
def start_requests(self):
'''
yield 返回一个迭代器,可以遍历数据
url: str, 爬取的URL,双斜杠后是域名后后缀是.com
callback: Optional[Callable] = None, 用来处理URL返回的 response 的方法
method: str = "GET", request的请求方式
headers: Optional[dict] = None, 请求头,用于模拟浏览器
'''
url = 'https://club.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98&productId=100009464799&score=0&sortType=5&page=0&pageSize=10&isShadowSku=0&fold=1'
yield scrapy.Request(url=url, headers=self.header, callback=self.myprocess)
def myprocess(self, response: scrapy.http.Response):
# 打印请求内容
print(">>>" * 30)
# 通过re.match进行正则匹配,获取完整的json内容
response_match = re.match('(fetchJSON_comment98()(.*)();)', response.text)
# 通过json库转换成JSON对象
json_res = json.loads(response_match.group(2).replace('
', '').replace('
', ''))
# 获取comments中的value
comments = json_res['comments']
# 循环获取每条评论
for comment in comments:
creationTime = comment['creationTime']
nickname = comment['nickname']
productColor = comment['productColor']
productSize = comment['productSize']
content = comment['content']
print(content, creationTime, nickname, productColor, productSize)
print(">>>" * 30)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
4、运行:在Python终端中输入scrapy crawl jdpc
关于Python学习指南
学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!
包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、自动化办公等学习教程。带你从零基础系统性的学好Python!
👉Python所有方向的学习路线👈
Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。(全套教程文末领取)
👉Python学习视频600合集👈
观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
温馨提示:篇幅有限,已打包文件夹,获取方式在:文末
👉Python70个实战练手案例&源码👈
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
👉Python大厂面试资料👈
我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
👉Python副业兼职路线&方法👈
学好 Python 不论是就业还是做副业赚钱都不错,但要学会兼职接单还是要有一个学习规划。
👉 这份完整版的Python全套学习资料已经上传,朋友们如果需要可以扫描下方CSDN官方认证二维码或者点击链接免费领取【保证100%免费
】
点击免费领取《CSDN大礼包》:Python入门到进阶资料 & 实战源码 & 兼职接单方法 安全链接免费领取