scrapy的spider
来源:互联网 发布:国外的域名需要备案吗 编辑:程序博客网 时间:2024/05/16 15:47
普通的spider
spider的属性介绍
例子:
import scrapyfrom myproject.items import MyItemclass MySpider(scrapy.Spider): name = 'example.com' allowed_domains = ['example.com'] start_urls = [ 'http://www.example.com/1.html', 'http://www.example.com/2.html', 'http://www.example.com/3.html', ] def parse(self, response): sel = scrapy.Selector(response) for h3 in response.xpath('//h3').extract(): yield MyItem(title=h3) for url in response.xpath('//a/@href').extract(): yield scrapy.Request(url, callback=self.parse)
创建一个spider模板 scrapy genspider domain domain.com
蜘蛛爬虫(是spider的子类)
创建一个crawlspider模板 scrapy genspider -t crawl domain domain.com
功能:像蜘蛛一样爬去网页
rules: 一个包含一个(或多个) Rule 对象的集合(list)。 每个 Rule 对爬取网站的动作定义了特定表现。 Rule对象在下边会介绍。 如果多个rule匹配了相同的链接,则根据他们在本属性中被定义的顺序,第一个会被使用。
parse_start_url(response):
当start_url的请求返回时,该方法被调用。 该方法分析最初的返回值并必须返回一个 Item 对象或者 一个 Request 对象或者 一个可迭代的包含二者对象。
爬取规则
class scrapy.contrib.spiders.Rule(link_extractor, callback=None, cb_kwargs=None, follow=None, process_links=None, process_request=None)#link_extractor 是一个 Link Extractor 对象。 其定义了如何从爬取到的页面提取链接。#callback 是一个callable或string(该spider中同名的函数将会被调用)。 从link_extractor中每获取到链接时将会调用该函数。该回调函数接受一个response作为其第一个参数, 并返回一个包含 Item 以及(或) Request 对象(或者这两者的子类)的列表(list)。#cb_kwargs 包含传递给回调函数的参数(keyword argument)的字典#follow 是一个布尔(boolean)值,指定了根据该规则从response提取的链接是否需要跟进。 如果 callback 为None, follow 默认设置为 True ,否则默认为 False 。#process_links 是一个callable或string(该spider中同名的函数将会被调用)。 从link_extractor中获取到链接列表时将会调用该函数。该方法主要用来过滤。#process_request 是一个callable或string(该spider中同名的函数将会被调用)。 该规则提取到每个request时都会调用该函数。该函数必须返回一个request或者None。 (用来过滤request)
例子:
import scrapyfrom scrapy.contrib.spiders import CrawlSpider, Rulefrom scrapy.contrib.linkextractors import LinkExtractorclass 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
官方文档
中文官方文档
官方文档是学习的最好资料
0 0
- scrapy的spider
- Scrapy 的 Spider 的编写
- Spider之Scrapy安装的方法详解
- 让Scrapy的Spider更通用
- Scrapy spider代码片段
- Scrapy Spider前奏
- scrapy 入门教程 爬虫 Spider
- Spider based on scrapy
- scrapy爬虫之Spider
- scrapy中spider
- scrapy 之 Spider类
- 爬虫Scrapy-05Spider
- scrapy如何针对不同的spider指定不同的参数
- 使用python的scrapy框架,spider与pipelines的调用
- scrapy如何针对不同的spider指定不同的参数
- 搜索引擎–Python下开源爬虫(spider)框架scrapy的使用
- windows 7 使用 scrapyd 监控 scrapy的 spider
- scrapy settings --- 为每一个spider设置自己的pipeline
- bttorrent命令脚本测试
- 具体的设计模式(一):创建型模式
- 商城--更新管理员信息
- php5.3.0 新增参数类型
- JavaScript 中的变量提升
- scrapy的spider
- utf8mb4与utf8的区别
- js报错总结
- 【数据库】数据库设计三大范式
- 重构
- Linux下DISPLAY环境变量的作用
- 检测到远端rexec服务正在运行中
- 探索 DDS 和 EDA 工具
- 关于C语言交换两个数的实现方法以及个人心得