前言:
此刻大家对“pythonscrapy参数”大致比较重视,姐妹们都需要了解一些“pythonscrapy参数”的相关文章。那么小编在网络上汇集了一些对于“pythonscrapy参数””的相关文章,希望各位老铁们能喜欢,你们快快来了解一下吧!背景
在前面的几篇关于爬虫的文章中,我们对基础的Requests、lxml两个库做了简要介绍,但是重所周知,Scrapy才是爬虫界的扛把子,想要爬取企业外部数据,肯定是无法逃避的。
为了方便小伙伴们根据自己的业务需求选择适用的爬虫工具,我对目前常用的几种做了对比,如下表所示:
另外,有需要的伙伴可以简单回顾下之前的两篇文章,链接如下:
Python数据分析之爬虫第四练:如何避免爬取到重复的数据?Python数据分析之爬虫第六练:五分钟掌握XPath使用窍门
需要注意的是,头条有个不太友好的地方,通过链接进行访问的页面会存在代码块没有换行的问题,最好还是通过个人主页查找相应的文章浏览。
现在网上很多资料可能伙伴们看起来都觉得从开始到放弃只要3秒钟的节奏,但其实真正的操练下,也还是有一套快速了解和上手的路径的,以下enjoy~~~
Scrapy简介
Scrapy是一个为了爬取网站信息,提取结构性数据而编写的应用框架。Scrapy用途广泛,可用于数据挖掘、监测和自动化测试等。Scrapy是全世界爬虫专家的秘密。他们知道如何使用它以节省工作时间,提供出色的性能,并且使他们的主机费用达到最低限度。
Scrapy的工作原理如下图所示:
Python数据分析之Scrapy第一练:十分钟亲手编写一个Scrapy爬虫
原创2022-05-11 19:36·职教之光
背景
在前面的几篇关于爬虫的文章中,我们对基础的Requests、lxml两个库做了简要介绍,但是重所周知,Scrapy才是爬虫界的扛把子,想要爬取企业外部数据,肯定是无法逃避的。
为了方便小伙伴们根据自己的业务需求选择适用的爬虫工具,我对目前常用的几种做了对比,如下表所示:
另外,有需要的伙伴可以简单回顾下之前的两篇文章,链接如下:
Python数据分析之爬虫第四练:如何避免爬取到重复的数据?Python数据分析之爬虫第六练:五分钟掌握XPath使用窍门
需要注意的是,头条有个不太友好的地方,通过链接进行访问的页面会存在代码块没有换行的问题,最好还是通过个人主页查找相应的文章浏览。
现在网上很多资料可能伙伴们看起来都觉得从开始到放弃只要3秒钟的节奏,但其实真正的操练下,也还是有一套快速了解和上手的路径的,以下enjoy~~~
Scrapy简介
Scrapy是一个为了爬取网站信息,提取结构性数据而编写的应用框架。Scrapy用途广泛,可用于数据挖掘、监测和自动化测试等。Scrapy是全世界爬虫专家的秘密。他们知道如何使用它以节省工作时间,提供出色的性能,并且使他们的主机费用达到最低限度。
Scrapy的工作原理如下图所示:
第1步:爬虫使用URL构造一个请求,提交给引擎。如要伪装成浏览器,或者设置代理IP,先在爬虫中间件中设置,再发送给引擎。
第2步:引擎将请求提交给调度器,调度器根据请求的优先级确定执行顺序。
第3步:引擎从调度器获取即将要执行的请求。
第4步:引擎通过下载器中间件,将请求发送给下载器下载页面。
第5步:页面完成下载后,下载器会生成一个响应对象并将其发送给引擎。下载后的数据会保存于响应对象中。
第6步:引擎接收来自下载器的响应对象后,通过爬虫中间件,将其发送给爬虫进行处理。
第7步:爬虫将抽取到的一条数据实体和新的请求发送给引擎。
第8步:引擎将从爬虫获取到的实体发送给项目管道,项目管道实现数据持久化等功能。同时将新的请求发送给调度器,再从第2步开始重复执行,直到调度器中没有更多的请求,引擎关闭该网站。
一个简单的爬虫
1 需求分析
假设我们现在需要爬取起点中文网畅销排行榜的数据,数据内容包括:小说名称、作者、小说类型和连载状态。
大家可以先回顾下,我们在lxml那篇文章中讲过的网页XPath信息复制获取的便捷途径,如上图所示。
我们也可以通过下面的代码和页面数据对比进行验证。
# 导入爬虫和正则工具包import requests as reqimport refrom lxml import etree# UA代表访问网站的浏览器是哪种浏览器,可以通过在地址栏中输入“about:version”获取# “\”是行连接符,headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) \ AppleWebkit/537.36 (KHTML, like Gecko) \ Chrome/100.0.4896.127 Safari/537.36'} qidianurl = '; # 目标网址:起点中文网qidianpage = req.get(qidianurl, headers=headers).textqidianhtml = etree.HTML(qidianpage) # 解析获取到的html文件 bookname1 = qidianhtml.xpath('//*[@id="book-img-text"]/ul/li[1]/div[2]/h2/a/text()') # 小说名称bookauthor1 = qidianhtml.xpath('//*[@id="book-img-text"]/ul/li[1]/div[2]/p[1]/a[1]/text()') # 作者booktype1 = qidianhtml.xpath('//*[@id="book-img-text"]/ul/li[1]/div[2]/p[1]/a[2]/text()') # 类型bookstatus1 = qidianhtml.xpath('//*[@id="book-img-text"]/ul/li[1]/div[2]/p[1]/span/text()') # 连载状态print('The book name is:%s。\n' % bookname1)print('The book author is:%s。\n' % bookauthor1)print('The book type is:%s。\n' % booktype1)print('The book status is:%s。\n' % bookstatus1)
2 创建Scrapy项目
在创建项目之前,肯定是先要安装Scrapy库,安装方法与其它的库一致,也是通过pip install scrapy实现,只不过需要注意的是在Jupyter环境中需要在前面加个!,以表示执行的是shell命令。
!pip install scrapy
安装完成后,就可以创建爬虫项目,Jupyter中的创建方式如下:
!scrapy startproject SHLQidianSpider
其中,最后面的“SHLQidianSpider”是我的爬虫项目名称,大家可以根据自己的需要修改。创建成功后,会出现下面的信息:
需要注意的是最后的提示内容,后续步骤需要在爬虫项目的根目录下执行,而不是Jupyter的当前目录,否则会出现报错。如果适用的是CMD命令行,直接cd到对应目录即可,下图是一个简单的示例,大家根据自己的实际路径进行修改。
3 编码爬虫代码
创建完项目之后,在项目的根目录下执行生成爬虫的命令,如下所示:
scrapy genspider SHL_qidian_hot_spider_20220511 example.com
这可以在"
/Work/SHLQidianSpider/SHLQidianSpider/spiders "目录(一定要注意位置)中创建一个python脚本,我已经命名为“
SHL_qidian_hot_spider_20220511.py”,并且内容已经修改为如下的内容:
#-*-coding:utf-8-*-from scrapy import Requestfrom scrapy.spiders import Spiderclass HotSalesSpider(Spider): #定义爬虫名称 name = 'hot' #起始的URL列表:起点畅销榜前2页 start_urls = [";, ";] #解析函数 def parse(self, response): #使用xpath定位到小说内容的div元素 list_selector = response.xpath("//div[@class='book-mid-info']") #依次读取每部小说的元素,从中获取名称、作者、类型和形式 for one_selector in list_selector: #获取小说名称 name = one_selector.xpath("h2/a/text()").extract()[0] #获取作者 author = one_selector.xpath("p[1]/a[1]/text()").extract()[0] #获取类型 type = one_selector.xpath("p[1]/a[2]/text()").extract()[0] #获取形式(连载/完本) form = one_selector.xpath("p[1]/span/text()").extract()[0] #将爬取到的一部小说保存到字典中 hot_dict = { "name":name, # 小说名称 "author":author, # 作者 "type":type, # 类型 "form":form # 形式 } #使用yield返回字典 yield hot_dict
在我的Jupyter中的路径如下图,大家根据自己的实际部署情况自行修改即可。
当然,我们也可以直接在上述目录下直接创建python脚本,不需要通过genspider命令生成。
4 运行爬虫
在爬虫项目的根目录下运行爬虫脚本,运行结果如下图所示:
同时,在我们爬虫脚本中设定的输出文件中,也生成了对应的文件。
5 迭代优化
最后就是大家根据自己的实际需求进行代码迭代优化了,如在此中遇到问题,可在评论区留言反馈,我们一起交流。
一起练习吧
最后,依旧是一起练习环节,希望小伙伴们能够分享一个自己的实操案例,GO GO GO~~~
标签: #pythonscrapy参数