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

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

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

参考文章:

scrapy系列(四)——CrawlSpider解析


Spiders-爬取规则(Crawling rules)

相关文章
|
9月前
|
数据采集 Web App开发 数据安全/隐私保护
实战:Python爬虫如何模拟登录与维持会话状态
实战:Python爬虫如何模拟登录与维持会话状态
|
10月前
|
数据采集 Web App开发 自然语言处理
新闻热点一目了然:Python爬虫数据可视化
新闻热点一目了然:Python爬虫数据可视化
|
9月前
|
数据采集 监控 数据库
Python异步编程实战:爬虫案例
🌟 蒋星熠Jaxonic,代码为舟的星际旅人。从回调地狱到async/await协程天堂,亲历Python异步编程演进。分享高性能爬虫、数据库异步操作、限流监控等实战经验,助你驾驭并发,在二进制星河中谱写极客诗篇。
Python异步编程实战:爬虫案例
|
10月前
|
数据采集 存储 XML
Python爬虫技术:从基础到实战的完整教程
最后强调: 父母法律法规限制下进行网络抓取活动; 不得侵犯他人版权隐私利益; 同时也要注意个人安全防止泄露敏感信息.
1105 19
|
9月前
|
数据采集 存储 JSON
Python爬虫常见陷阱:Ajax动态生成内容的URL去重与数据拼接
Python爬虫常见陷阱:Ajax动态生成内容的URL去重与数据拼接
|
10月前
|
数据采集 存储 Web App开发
处理Cookie和Session:让Python爬虫保持连贯的"身份"
处理Cookie和Session:让Python爬虫保持连贯的"身份"
|
9月前
|
数据采集 存储 JavaScript
解析Python爬虫中的Cookies和Session管理
Cookies与Session是Python爬虫中实现状态保持的核心。Cookies由服务器发送、客户端存储,用于标识用户;Session则通过唯一ID在服务端记录会话信息。二者协同实现登录模拟与数据持久化。
|
11月前
|
数据采集 存储 JSON
地区电影市场分析:用Python爬虫抓取猫眼/灯塔专业版各地区票房
地区电影市场分析:用Python爬虫抓取猫眼/灯塔专业版各地区票房
|
10月前
|
缓存 供应链 芯片
电子元件类商品 item_get - 商品详情接口深度分析及 Python 实现
电子元件商品接口需精准返回型号参数、规格属性、认证及库存等专业数据,支持供应链管理与采购决策。本文详解其接口特性、数据结构与Python实现方案。
|
10月前
|
数据采集 Web App开发 前端开发
处理动态Token:Python爬虫应对AJAX授权请求的策略
处理动态Token:Python爬虫应对AJAX授权请求的策略

推荐镜像

更多