前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python爬虫scrapy之rules的基本使用

python爬虫scrapy之rules的基本使用

作者头像
菲宇
发布2019-06-13 11:41:44
1.3K0
发布2019-06-13 11:41:44
举报
文章被收录于专栏:菲宇菲宇

Link Extractors

Link Extractors 是那些目的仅仅是从网页(scrapy.http.Response 对象)中抽取最终将会被follow链接的对象。

Scrapy默认提供2种可用的 Link Extractor, 但你通过实现一个简单的接口创建自己定制的Link Extractor来满足需求。

每个LinkExtractor有唯一的公共方法是 extract_links ,它接收一个 Response 对象,并返回一个 scrapy.link.Link 对象。Link Extractors,要实例化一次并且 extract_links 方法会根据不同的response调用多次提取链接。

Link Extractors在 CrawlSpider 类(在Scrapy可用)中使用, 通过一套规则,但你也可以用它在你的Spider中,即使你不是从 CrawlSpider 继承的子类, 因为它的目的很简单: 提取链接。

上面都是官网解释,看看就行了,这个Rule啊其实就是为了爬取全站内容的写法,首先我们继承的就不是scrapy.spider类了,而是继承CrawlSpider这个类,看源码就回明白CrawlSpider这个类也是继承scrapy.spider类。

  具体参数:

  allow:这里用的是re过滤,我们其实就是start_urls加上我们这个匹配到的具体链接下的内容。   LinkExtractor:故名思议就是链接的筛选器,首先筛选出来我们需要爬取的链接。

  deny:这个参数跟上面的参数刚好想反,定义我们不想爬取的链接。

  follow:默认是false,爬取和start_url符合的url。如果是True的话,就是爬取页面内容所有的以start_urls开头的url。

  restrict_xpaths:使用xpath表达式,和allow共同作用过滤链接。还有一个类似的restrict_css

  callback:定义我们拿到可以爬取到的url后,要执行的方法,并传入每个链接的response内容(也就是网页内容)

  注意:rule无论有无callback,都由同一个_parse_response函数处理,只不过他会判断是否有follow和callback

1 2

from scrapy.spiders.crawl import Rule, CrawlSpider from scrapy.linkextractors import LinkExtractor

示例:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22

from whole_website.items import DoubanSpider_Book from scrapy.spiders.crawl import Rule, CrawlSpider from scrapy.linkextractors import LinkExtractor class DoubanSpider(CrawlSpider): name = "douban" allowed_domains = ["book.douban.com"] start_urls = ['https://book.douban.com/'] rules = [ Rule(LinkExtractor(allow='subject/\d+'),callback='parse_items) ] def parse_items(self, response): items = DoubanSpider_Book() items['name'] = response.xpath('//*[@id="wrapper"]/h1/span/text()').extract_first() items['author'] = response.xpath('//*[@id="info"]//a/text()').extract() data = {'book_name':items['name'], 'book_author':items['author'] } print(data

参考地址:http://scrapy-chs.readthedocs.io/zh_CN/0.24/topics/link-extractors.html

常用正则表达式学习记录: 1、特殊字符 1)^ 代表字符串起始字符 2)$ 代表字符串结尾字符 3). 代表任意字符,匹配除换行符(\n、\r)之外的任何单个字符。要匹配包括 4)'\n' 在内的任何字符,请使用像"(.|\n)"的模式 5)* 代表前面字符可以重复多次,贪婪匹配,匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,} 6)? 代表限制只取1个字符,匹配前面的子表达式零次或一次。例如,"do(es)?" 可以匹配 "do" 或 "does" 。? 等价于 {0,1} 7)+ 代表匹配前面的子表达式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,} 8){n,}n 代表是一个非负整数。至少匹配n 次。例如,'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o。'o{1,}' 等价于 'o+'。'o{0,}' 则等价于 'o*' 9){n,m} 代表m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,"o{1,3}" 将匹配 "fooooood" 中的前三个 o。'o{0,1}' 等价于 'o?'。请注意在逗号和两个数之间不能有空格 10)x|y 代表匹配 x 或 y。例如,'z|food' 能匹配 "z" 或 "food"。'(z|f)ood' 则匹配 "zood" 或 "food" 11)[ ] 代表字符集合,当为[xyz]时匹配所包含的任意一个字符,例如, '[abc]' 可以匹配 "plain" 中的 'a'。当为[a-z]匹配指定范围内的任意一个字符,例如,'[a-z]' 可以匹配 'a' 到 'z' 范围内的任意小写字母字符。当为[a-z]{6}匹配指定范围内的任意6个字符。当为[a-z]匹配任何不在指定范围内的任意字符,例如,'[a-z]' 可以匹配任何不在 'a' 到 'z' 范围内的任意字符。另外,当*.等特殊字符在[ ]中就没有特殊使用功能 12)\s 代表匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v] 13)\S 代表匹配任何非空白字符。等价于 [^ \f\n\r\t\v] 14)\w 匹配字母、数字、下划线。等价于[A-Za-z0-9_] 15)\W 匹配非字母、数字、下划线。等价于 [^A-Za-z0-9_] 16)[\u4e00-\u9fa5] 这是专门用于匹配简体中文的正则表达式, 繁体字也在里面,[\u4e00-\u9fa5] 只匹配一个中文,[\u4e00-\u9fa5]+ 匹配一个或多个中文

17)(\d{4}[年/-]\d{1,2}([月/-]\d{1,2}|[月/-]$|$)) 匹配年月日之间不同间隔的正则表达式,例如:2010年8月,2010/8,2010-8等

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019年05月06日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Link Extractors
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档