爬虫系列3:scrapy技术进阶(xpath、rules、shell等)

Python爬虫基础教程(19)Python Scrapy爬虫框架选择器之XPath选择器:不会XPath还敢说会Scrapy?这篇让爬虫效率翻倍的秘籍请收好! “为什么我又抓不到数据?!”深夜12点,程序员小张对着屏幕发出了一声哀嚎。这已经是他今晚第17次尝试从糗事百科抓取段子了,但每次返回的都是空列表。他盯着那个层层嵌套的DIV结构,几乎要绝望了。如果你也像小张一样,在Scrapy爬虫的数据提取环节卡住,那么今天我要介绍的XPath选择器,就是你一直在找的利器。 阅读详情

本文主要介绍与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中继续寻找符合条件的url
Rule(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之间,这也可以降低爬虫被墙掉的几率。

ScrapyScrapy教程6——提取数据 前一小节我们拿到了页面的数据,那页面中那么多内容,我们想要其中的部分内容,该如何获取呢?这就需要对我们下载到的数据进行解析,提取出来想要的数据,这节就讲讲如何提取数据。 阅读详情

相关推荐

基于Scrapy框架的python网络爬虫(1)

1、搭建环境这里我使用的是anaconda,anaconda里面集成了很多关于python科学计算的第三方库,主要是安装方便,anaconda中自带Spyder。 这里下载anaconda 比较推荐使用Python2.7 在anaconda下安装Scrapy也很简单!CMD进入命令行,直接输入conda install scrapy,然后点“y”,很简单就可以安装成功。 这样就搭建好了环境。

lucky_yang_的博客 4531

一款漂亮的网址永久发b页源码

没有后台直接html修改自己的资料就行

爬虫中的Scrapy框架

文章目录Scrapy 框架Scrapy架构图(绿线是数据流向)Scrapy的运作流程Scrapy的安装介绍Windows 安装方式Ubuntu 需要9.10或以上版本安装方式入门案例学习目标一. 新建项目(scrapy startproject)二、明确目标(mySpider/items.py)三、制作爬虫 (spiders/new_chang.py)1. 爬数据2. 取数据3.保存数据Scra...

weixin_45414731的博客 630

Scrapy爬虫XPath语法

Scrapy爬虫XPath语法路径表达式路径案例谓语(Predicates)谓语实例选取未知节点实例选取若干路径实例Xpath轴功能函数注意事项:提取内容 XPath 使用路径表达式来选取 XML 文档中的节点或节点集。节点是通过沿着路径 (path) 或者步 (steps) 来选取的。 路径表达式 表达式 描述 nodename 选取此节点的所有子节点。 / 从根节点选取。...

灵动的艺术的博客 3728

Scrapy-xpath用法以及实例

xpath的语法xpath语法-谓语使用方法可以直接在chrome->F12开发者工具中复制xpath这里介绍一种测试的方法平时我们在pycharm或者编辑器需要每次运行,就需要一次次请求,这里可以用以下的方法: 假设我们需要爬取伯乐在线的一篇文章,链接为 http://blog.jobbole.com/112614/ 我们爬取一篇文章的标题,发布时间,点赞数,收藏数,评论数 命令行执行如下s

Co_zy的博客 1万+

xpath的学习

xpath的作用就是两个字“定位”,运用各种方法进行快速准确的定位,推荐两个非常有用的的firefox工具:firebug和xpath checker 定位 1.依靠自己属性,文本定位 //td[text()='xxx'] //div[contains(@class,'xxx')] //div[@class='xxx' and @type='xxx'] 2.依靠父节点定位 ...

weixin_30615767的博客 174

scrapyxpath语法

Scrapy是基于python的开源爬虫框架,使用起来也比较方便。具体的官网档:http://doc.scrapy.org/en/latest/   之前以为了解python就可以直接爬网站了,原来还要了解HTML,XML的基本协议,在了解基础以后,在了解下xpath的基础上,再使用正则表达式(python下的re包提供支持)提取一定格式的信息(比如说url),就比较容易处理网页了。   xp

dream8062的专栏 817

3scrapy——xpath语法

XPath 是一门在 XML 文档中查找信息的语言。XPath 用于在 XML 文档中通过元素和属性进行导航。         XPath 含有超过 100 个内建的函数。这些函数用于字符串值、数值、日期和时间比较、节点和 QName 处理、序列处理、逻辑值等等。         XPath 是 W3C 标准,XPath 于 1999 年 11 月 16 日 成为 W3C 标准。XPath

badman250的专栏 3万+

爬虫框架 Scrapy 详解

Scrapy是适用于Python的一个快速、高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试。Scrapy是一个框架,可以根据需求进行定制。它也提供了多种类型爬虫的基类,如BaseSpider、sitemap爬虫等,最新版本又提供了web2.0爬虫的支持。...

m0_67403076的博客 1万+

18.网络爬虫Scrapy实战演示

Scrapy Shell简介 🧾 🧾Scrapy是一个开源的Python框架,用于快速、高效地爬取网站数据。Scrapy提供了一组功能强大的工具和组件,使开发人员可以轻松地从网站上提取所需的数据。 🧾 🧾Scrapy Shell是一个命令行工具,可以让开发人员交互式地调试和探索网站。使用Scrapy Shell,开发人员可以轻松地测试Web爬虫并查看网站上的数据。 🧾 以下是Scrapy Shell的一些主要特点: 轻松进入交互式Shell:只需输入“scrapy shell”命令即可进入交

weixin_50804299的博客 4238

网络爬虫Scrapy shell 的使用和介绍

启用Scrapy shellO(∩_∩)OScrapy shell 是一个交互式终端,可以在不启动爬虫的情况下尝试及调试爬取部分的代码, 也可以测试XPath路径表达式或CSS表达式是否正确。它可以避免每次修改表达式后运行爬 虫的麻烦,在开发和调试爬虫的阶段发挥着很大的作用。Scrapy shell 一般使用标准 Python 终端。但如果计算机中已经安装 IPython 终端,那么 Scrapy shell 将优先使用IPython 终端。

weixin_49816293的博客 1746

scrapy中parse函数里面xpath的内容打印不出来_如何利用Scrapy爬取知名技术文章网站!干货真多

Scrapy 是一个非常优秀的爬虫框架,通过 Scrapy 框架,可以非常轻松地实现强大的爬虫系统,我们只需要将精力放在抓取规则以及如何处理抓取的数据上即可,本文通过实战来介绍 Scrapy 的入门知识以及一些高级应用。1. Scrapy 基础知识1.1 Scrapy 简介Scrapy 是适用于 Python 的一个快速、高层次的屏幕抓取和 web抓取框架,用于抓取web站点并从页面中提取结构化的...

weixin_39564853的博客 547

Python3网络爬虫(十二):初识Scrapy之再续火影情缘

《火影忍者》不是已经完结了吗?《火影忍者》是完结了,但是鸣人儿子的故事才刚刚开始,《博人传之火影忍者新时代》正在热播中。因此,我又开始追动漫了,虽然现在不会像儿时那样激动到上蹿下跳,但是我依然喜欢看,现在感觉,继续看火影,更多的是一种情怀吧!

Jack-Cui 3万+

Scrapy爬虫实战:从零到英雄

本文通过实例介绍了如何使用Scrapy框架进行网络数据抓取。首先,我们学习了如何分析网页结构并使用XPath提取所需信息。接着,我们了解到如何利用Scrapy Shell来测试XPath表达式,确保我们正确地定位到了目标数据。文章还展示了如何处理相对URLs转换为绝对URLs,并优化爬虫脚本以排除无效链接。通过这些步骤,读者将能够掌握创建一个基本爬虫项目的过程,并对Scrapy框架有一个深入的理解。

weixin_42181686的博客 731

【Python从入门到进阶】47、Scrapy Shell的了解与应用

Scrapy Shell可以在未启动spider的情况下尝试及调试我们的爬取代码。其本意是用来测试提取数据的代码,不过我们可以将其作为正常的python终端,在上面测试任何的Python代码。该终端是用来测试xPath或css表达式,查看他们的工作方式及从爬取的网页中提取的数据。在编写我们的spider爬虫时,该终端提供了交互性测试我们的表达式代码的功能,免了每次修改后运行spider的麻烦。旦熟悉了scrapy终端后,我们会发现其在开发和调试spider时发挥的巨大作用。

程序猿之洞 1952

xpath contains_Python 爬虫进阶: Scrapy ShellXpath 学习心得

说来好笑,刚学习爬虫的时候为了调试代码,是将网页下载到本地,再用beautifulsoup载入本地网页文件进行分析,以保证选择器编写正确。Scrapy内置的调试器Scrapy Shell正好作此用途,使用的选择器则是xpath。下面是两篇scrapy shellxpath selector的教程。Scrapy Tutorial #6: Scrapy Shell Overview & ...

weixin_39682560的博客 226

Python网络爬虫开发:从Scrapy框架到反爬策略实战

网络爬虫作为数据采集的核心技术,通过模拟浏览器行为自动抓取网页内容。其工作原理基于HTTP协议请求-响应模型,通过URL队列管理、页面解析和数据存储等模块协同工作。在Python生态中,Scrapy框架提供了完整的爬虫开发解决方案,包含引擎、调度器、下载器等核心组件。实际开发中需要处理反爬机制、数据清洗和性能优化等挑战,常见应对策略包括请求头伪装、IP代理池和验证码识别等技术。网络爬虫广泛应用于搜索引擎、电商比价和舆情监控等场景,是数据分析和人工智能领域的要基础设施。

weixin_34006965的博客 362
上一篇: 爬虫系列2:scrapy项目入门案例分析
下一篇: 爬虫系列4:scrapy技术进阶之多页面爬取
峰峰jack
博客等级 码龄20年 109粉丝 98原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值