爬虫系列3:scrapy技术进阶(xpath、rules、shell等)
来源:互联网 发布:固态用软件优化 编辑:程序博客网 时间:2024/04/30 14:06
本文主要介绍与scrapy应用紧密相关的关键技术,不求很深入,但求能够提取要点。内容包括:
1、xpath选择器:选择页面中想要的内容
2、rules规则:定义爬虫要爬取的域
3、scrapy shell调试:辅助调试工具
4、去重设置:内置的防止重复爬取的工具
5、防屏蔽:通过设置爬取时间间隔防屏蔽
1、xpath选择器
先介绍Selector的概念:它帮助我们从页面中提取想要的内容,比如提取每一页的新闻标题等。scrapy支持的页面内容选择器Selector有如下两种:(1)xpath(): 传入xpath表达式,返回该表达式所对应的所有节点的selector list列表;(2)css(): 传入CSS表达式,返回该表达式所对应的所有节点的selector list列表。两者都可以达到选择内容的目标,这里我们重点关注xpath的使用方法。
xpath选择器基本语法规则在http://www.w3school.com.cn/xpath/xpath_syntax.asp已经讲得很详细了,这里不再赘述。直接举例:
<titlelang=’test’>abc</title>
<titlelang=’eng’>def</title>
//title[@lang] 选取所有拥有名为 lang 的属性的 title 元素。
//title[@lang='eng'] 选取所有 title 元素,且这些元素拥有值为eng 的 lang 属性。
xpath选择到的内容,还可以通过以下两个函数做进一步的处理:
extract(): 序列化该节点为unicode字符串并返回list。
re(): 根据传入的正则表达式对数据进行提取,返回unicode字符串list列表。
tem['id'] =response.xpath('//td[@id="item_id"]/text()').re(r'ID: (\d+)') #提取ID号item['name'] =response.xpath('//td[@id="item_name"]/text()').extract() #提取文本内容
2、rules规则
在scrapy中,通过定义规则rules就可以实现自动的迭代爬取,甚至爬取全站内容。写rules要特别注意,其中allow是指要导出的url必须符合allow所规定的正则表达式,而不是指从allow的网址中导出url。
# follow = True表示会在返回的url中继续寻找符合条件的urlRule(LinkExtractor(allow='^https://movie\.douban\.com/subject/\d+/reviews$',restrict_xpaths=('//div[@class="review-more"]/a')),follow = True),# callback='parse_content'表示导出的页面由parse_content()函数进行处理。Rule(LinkExtractor(allow='^https://movie\.douban\.com/subject/\d+/reviews.*',restrict_xpaths=('//div[@id="paginator"]/a')),callback='parse_content', follow = True))
3、scrapy shell调试
有个好的调试工具对于提升开发效率是非常必要的,Scrapy shell就是很不错的调试工具。常用的情景是:不确定某些xpath、xcss的写法是否正确,程序运行出现问题时等。命令如下:
#在cmd中输入如下命令:
scrapy shell<url>scrapy shellhttp://douban.movie.com
4、去重设置
应用爬虫进行多页面爬取时,从两个不同页面可能爬取到同一个页面的url,从而导致重复爬取的情况。Scrapy提供去重过滤器,内置过滤器名为RFPDupeFilter,默认是开启状态。对于过滤器而言,网页请求的指纹(request fingerprint)是一个hash值,唯一指向网页对应的url。例如:
http://www.example.com/query?id=111&cat=222
http://www.example.com/query?cat=222&id=111
这两个url指向的资源是相同的,它们具有相同的response,会被视为重复的url。
5、防屏蔽
高频度的爬虫访问会影响服务器的性能,因此常常会被网站屏蔽。通过在setting.py文件中设置DOWNLOAD_DELAY参数,可以限制爬虫的访问频度。
DOWNLOAD_DELAY =0.25 # 250 ms of delay
通过启用RANDOMIZE_DOWNLOAD_DELAY参数(默认为开启状态),可以使爬取时间间隔随机化,随机时长控制在0.5-1.5倍的DOWNLOAD_DELAY之间,这也可以降低爬虫被墙掉的几率。
- 爬虫系列3:scrapy技术进阶(xpath、rules、shell等)
- 爬虫系列4:scrapy技术进阶之多页面爬取
- 【python爬虫】scrapy框架笔记(一):创建工程,使用scrapy shell,xpath
- scrapy爬虫必需品--------xpath学习
- scrapy爬虫(1)之xpath
- 网页爬虫--scrapy进阶
- 网页爬虫--scrapy进阶
- 网页爬虫--scrapy进阶
- 用Scrapy shell调试xpath
- 用Scrapy shell调试xpath
- python.scrapy爬虫-xpath查询语法
- 网络爬虫系列笔记(4)——Scrapy爬虫
- scrapy爬虫精要(3)
- python爬虫系列(七):XPath的使用
- 爬虫知识点(xpath)
- Scrapy系列教程(3)------Spider(爬虫核心,定义链接关系和网页信息抽取)
- 关于scrapy网络爬虫的xpath书写经验总结
- 【scrapy】xpath
- 打开xcworkspace左边的Xcodeproj为红色
- launcher相关小功能
- linux VMware安装 CentOS6.5 教程
- xml namespace in android
- react-native-video error
- 爬虫系列3:scrapy技术进阶(xpath、rules、shell等)
- 看懂UML类图
- IOS 从服务器下载文件
- 开源的许可证GPL、LGPL、BSD、Apache 2.0的通俗解释
- 回归问题中关于cost function 的选择
- org.hibernate.HibernateException: Unable to instantiate default tuplizer [org.hibernate.tuple.compon
- SDUT 3548 疯狂的小金 (贪心) -- 解题报告
- 项目运行
- java 文件上传 与 把文件解析成一个字节数组简单的后台示例