python爬虫:scrapy框架Scrapy类与子类CrawlSpider

举报
彭世瑜 发表于 2021/08/13 23:50:45 2021/08/13
【摘要】 Scrapy类 name 字符串,爬虫名称,必须唯一,代码会通过它来定位spider allowed_domains 列表,允许域名 没定义 或 空: 不过滤, url不在其中: url不会被处理, 域名过滤功能: settings中OffsiteMiddleware start_urls:列表或者元组,任务的种子 custom_settings:字典,覆...

Scrapy类

name 字符串,爬虫名称,必须唯一,代码会通过它来定位spider

allowed_domains 列表,允许域名
没定义 或 空: 不过滤,
url不在其中: url不会被处理,
域名过滤功能: settings中OffsiteMiddleware

start_urls:列表或者元组,任务的种子

custom_settings:字典,覆盖项目中的settings.py

crawler:Crawler 实例

settings:Settings 实例

logger:记录日志

from_crawler():类方法,创建spider时调用

start_requests():必须返回一个可迭代对象

make_requests_from_url(url):默认parse回调, dont_filter=True,不过滤url

parse(response): 默认回调方法, 返回值只能是Request, 字典和item对象,或者它们的可迭代对象

log(message[, level, component]):对logger的包装

closed(reason):spider结束时调用

参考文章
scrapy系列(三)——基础spider源码解析

CrawlSpider类

CrawlSpider继承于Spider,为全站爬取而生

rules:列表,元素为Rule类的实例,采集行为。类似Django的url匹配
如果有多个rule都匹配同一个链接,那么位置下标最小的一个rule将会被使用。

要request的地址和allow_domain里面的冲突,从而被过滤掉。
可以停用过滤功能。
yield Request(url, callback=self.parse_item, dont_filter=True)

__init__:执行了_compile_rules方法

parse:重写默认回调方法,调用方法_parse_response

parse_start_url:处理parse返回的response

_requests_to_follow:response中解析出目标url,并将其包装成request请求

_response_downloaded:_requests_to_follow的回调方法,作用就是调用_parse_response方法

_parse_response:spider._follow_links的值是从settings的CRAWLSPIDER_FOLLOW_LINKS值获取到的。

_compile_rules:将rule中的字符串表示的方法改成实际的方法

from_crawler

Rule类

link_extractor:Link Extractor实例,解析规则。

callback:方法或字符串,回调方法,慎用parse做为回调方法

cb_kwargs:字典,用于给callback方法传递参数

follow:布尔对象,表示是当前response否继续采集。如果callback是None,那么它就默认为True,否则为False。

process_links:在crawlspider中的_requests_to_follow方法中被调用,元素为Link的列表作为参数,返回值也是一个元素为Link的列表,目标url是相对的链接,那么scrapy会将其扩展成绝对的

process_request:处理request

CrawlSpider样例


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

class MySpider(CrawlSpider): name = 'example.com' allowed_domains = ['example.com'] start_urls = ['http://www.example.com'] rules = ( # 提取匹配 'category.php' (但不匹配 'subsection.php') 的链接并跟进链接(没有callback意味着follow默认为True) Rule(LinkExtractor(allow=('category\.php', ), deny=('subsection\.php', ))), # 提取匹配 'item.php' 的链接并使用spider的parse_item方法进行分析 Rule(LinkExtractor(allow=('item\.php', )), callback='parse_item'), ) def parse_item(self, response): self.log('Hi, this is an item page! %s' % response.url) item = scrapy.Item() item['id'] = response.xpath('//td[@id="item_id"]/text()').re(r'ID: (\d+)') item['name'] = response.xpath('//td[@id="item_name"]/text()').extract() item['description'] = response.xpath('//td[@id="item_description"]/text()').extract() return item
  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

参考文章:
scrapy系列(四)——CrawlSpider解析

Spiders-爬取规则(Crawling rules)

文章来源: pengshiyu.blog.csdn.net,作者:彭世瑜,版权归原作者所有,如需转载,请联系作者。

原文链接:pengshiyu.blog.csdn.net/article/details/80355917

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。