本文主要介绍与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之间,这也可以降低爬虫被墙掉的几率。

爬虫系列3:scrapy技术进阶(xpath、rules、shell等)的更多相关文章

  1. 爬虫系列(十) 用requests和xpath爬取豆瓣电影

    这篇文章我们将使用 requests 和 xpath 爬取豆瓣电影 Top250,下面先贴上最终的效果图: 1.网页分析 (1)分析 URL 规律 我们首先使用 Chrome 浏览器打开 豆瓣电影 T ...

  2. 爬虫系列(十一) 用requests和xpath爬取豆瓣电影评论

    这篇文章,我们继续利用 requests 和 xpath 爬取豆瓣电影的短评,下面还是先贴上效果图: 1.网页分析 (1)翻页 我们还是使用 Chrome 浏览器打开豆瓣电影中某一部电影的评论进行分析 ...

  3. 5、爬虫系列之scrapy框架

    一 scrapy框架简介 1 介绍 (1) 什么是Scrapy? Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架,非常出名,非常强悍.所谓的框架就是一个已经被集成了各种功能(高性能 ...

  4. 爬虫系列之Scrapy框架

    一 scrapy框架简介 1 介绍 (1) 什么是Scrapy? Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架,非常出名,非常强悍.所谓的框架就是一个已经被集成了各种功能(高性能 ...

  5. 爬虫系列4:scrapy技术进阶之多页面爬取

    多页面爬取有两种形式. 1)从某一个或者多个主页中获取多个子页面的url列表,parse()函数依次爬取列表中的各个子页面. 2)从递归爬取,这个相对简单.在scrapy中只要定义好初始页面以及爬虫规 ...

  6. scrapy爬虫系列之一--scrapy的基本用法

    功能点:scrapy基本使用 爬取网站:传智播客老师 完整代码:https://files.cnblogs.com/files/bookwed/first.zip 主要代码: ff.py # -*- ...

  7. python爬虫系列:Scrapy安装与使用

    这篇博文主要写Scrapy框架的安装与使用 Scrapy框架安装 命令行进入C:\Anaconda2\Scripts目录,运行:conda install Scrapy 创建Scrapy项目 1)进入 ...

  8. scrapy技术进阶-URL路径依赖

    方法1: #!/usr/bin/python # -*- coding: gbk -*- import time from scrapy.spider import BaseSpider from s ...

  9. 爬虫系列(九) xpath的基本使用

    一.xpath 简介 究竟什么是 xpath 呢?简单来说,xpath 就是一种在 XML 文档中查找信息的语言 而 XML 文档就是由一系列节点构成的树,例如,下面是一份简单的 XML 文档: &l ...

随机推荐

  1. 77. Combinations (java 求C(n,k)的组合,排除重复元素)

    题目: Given two integers n and k, return all possible combinations of k numbers out of 1 ... n. 解析:同求全 ...

  2. SQL SERVER 一组数据按规律横着放置,少则补空,如人员按一进一出的规律,进出为一组,缺少的补null

    假设一组数据:人员进出刷卡数据表[SwingCard] ID MenID Door 1 1 In 2 1 In 3 1 Out 4 1 In 5 1 Out 6 1 Out 想要变成如下:一进一出为一 ...

  3. 背包DP 存在异或条件的状态转移问题

    题目链接 分析:有大佬说可以用线性基写,可惜我不会,这是用DP写的 题目明确说明可到达的位置只与能值有关,和下标无关,我们就可以排个序,这样每个数可以转移的区间就是它的所有后缀 我们可以用dp[i][ ...

  4. 『计算机视觉』FPN:feature pyramid networks for object detection

    对用卷积神经网络进行目标检测方法的一种改进,通过提取多尺度的特征信息进行融合,进而提高目标检测的精度,特别是在小物体检测上的精度.FPN是ResNet或DenseNet等通用特征提取网络的附加组件,可 ...

  5. Github 指令上手 --- 分支

    指令环境 Git Shell 1.创建一个新分支 git branch branchName 2.切换到新创建的分支 git checkout branchName 1.2合起来使用指令(创建并切换) ...

  6. MySql习题和答案

    MySQL测试题 一.表关系请创建如下表,并创建相关约束 二.操作表 1.自行创建测试数据 2.查询“生物”课程比“物理”课程成绩高的所有学生的学号.ps:针对的是自己的生物成绩比物理成绩高,再把符合 ...

  7. ActiveMQ topic 普通订阅和持久订阅

    直观的结果:当生产者向 topic 发送消息, 1. 若不存在持久订阅者和在线的普通订阅者,这个消息不会保存,当普通订阅者上线后,它是收不到消息的. 2. 若存在离线的持久订阅者,broker 会为该 ...

  8. Ubuntu 16 修改时区!

    网上大部分解决办法是命令tzselect,然后选择亚洲-->中国->上海,但很遗憾,一点效果没有:后找到解决办法,运行命令dpkg-reconfigure tzdata,选择Asia--& ...

  9. 批量生成QRcode

    本想在excel批量生成GUID,并生成二维码. //Excel生成guid,uuid 格式:600d65bc-948a---fd8dfeebb1cd =LOWER(CONCATENATE(DEC2H ...

  10. linux 播放加密DVDs

    尝试下 https://www.cyberciti.biz/faq/howto-ubuntu-linux-playback-dvd/