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)

相关文章
|
2月前
|
数据采集 Web App开发 数据可视化
Python爬虫分析B站番剧播放量趋势:从数据采集到可视化分析
Python爬虫分析B站番剧播放量趋势:从数据采集到可视化分析b
|
1月前
|
数据采集 数据挖掘 测试技术
Go与Python爬虫实战对比:从开发效率到性能瓶颈的深度解析
本文对比了Python与Go在爬虫开发中的特点。Python凭借Scrapy等框架在开发效率和易用性上占优,适合快速开发与中小型项目;而Go凭借高并发和高性能优势,适用于大规模、长期运行的爬虫服务。文章通过代码示例和性能测试,分析了两者在并发能力、错误处理、部署维护等方面的差异,并探讨了未来融合发展的趋势。
116 0
|
2月前
|
数据采集 存储 C++
Python异步爬虫(aiohttp)加速微信公众号图片下载
Python异步爬虫(aiohttp)加速微信公众号图片下载
|
26天前
|
数据采集 存储 JSON
地区电影市场分析:用Python爬虫抓取猫眼/灯塔专业版各地区票房
地区电影市场分析:用Python爬虫抓取猫眼/灯塔专业版各地区票房
|
1月前
|
数据采集 存储 Web App开发
Python爬虫库性能与选型实战指南:从需求到落地的全链路解析
本文深入解析Python爬虫库的性能与选型策略,涵盖需求分析、技术评估与实战案例,助你构建高效稳定的数据采集系统。
219 0
|
24天前
|
数据采集 监控 调度
应对频率限制:设计智能延迟的微信读书Python爬虫
应对频率限制:设计智能延迟的微信读书Python爬虫
|
27天前
|
数据采集 机器学习/深度学习 数据可视化
Python量化交易:结合爬虫与TA-Lib技术指标分析
Python量化交易:结合爬虫与TA-Lib技术指标分析
|
28天前
|
数据采集 存储 XML
Python爬虫XPath实战:电商商品ID的精准抓取策略
Python爬虫XPath实战:电商商品ID的精准抓取策略
|
1月前
|
API 数据安全/隐私保护 Python
拼多多批量上架软件, 电商一键上货发布工具,python电商框架分享
多线程批量上传架构,支持并发处理商品数据 完整的拼多多API签名和token管理机制
|
2月前
|
数据采集 自然语言处理 分布式计算
大数据岗位技能需求挖掘:Python爬虫与NLP技术结合
大数据岗位技能需求挖掘:Python爬虫与NLP技术结合

热门文章

最新文章

推荐镜像

更多