OfL*_*ers 11 python response scrapy
我是使用Scrapy的新手,我想了解如何在CrawlSpider中使用规则.
如果我有一个规则,我在亚利桑那州图森市的蛋糕列表的黄页中爬行,那么如何产生一个URL请求激活规则 - 具体来说它是如何激活restrict_xpath属性的?
谢谢.
Eli*_*les 14
CrawlSpider
指定如何从页面中提取链接以及应为这些链接调用哪些回调的rules属性.它们由parse()
该类中实现的默认方法处理- 在此处查看源代码.
因此,每当您想要触发URL的规则时,您只需要生成一个scrapy.Request(url, self.parse)
,并且Scrapy引擎将向该URL发送请求并将规则应用于响应.
链接的提取(可能使用也可能不使用restrict_xpaths
)由为该规则注册的LinkExtractor对象完成.它基本上搜索整个页面中的所有<a>
s和<area>
s元素,或者仅在应用restrict_xpaths
表达式后获得的元素中搜索属性.
例如,假设你有一个像这样的CrawlSpider:
from scrapy.contrib.spiders.crawl import CrawlSpider, Rule
from scrapy.contrib.linkextractors import LinkExtractor
class MySpider(CrawlSpider):
start_urls = ['http://someurlhere.com']
rules = (
Rule(
LinkExtractor(restrict_xpaths=[
"//ul[@class='menu-categories']",
"//ul[@class='menu-subcategories']"]),
callback='parse'
),
Rule(
LinkExtractor(allow='/product.php?id=\d+'),
callback='parse_product_page'
),
)
def parse_product_page(self, response):
# yield product item here
Run Code Online (Sandbox Code Playgroud)
引擎开始向URL发送请求start_urls
并执行默认回调(parse()
CrawlSpider中的方法)以获取响应.
对于每个响应,parse()方法将在其上执行链接提取器以从页面获取链接.也就是说,它调用LinkExtractor.extract_links(response)
每个响应对象来获取URL,然后生成scrapy.Request(url, <rule_callback>)
对象.
示例代码是蜘蛛的骨架,它按照产品类别和子类别的链接抓取电子商务网站,以获取每个产品页面的链接.
对于在此蜘蛛中专门注册的规则,它将使用parse()
方法作为回调(将触发为这些页面调用爬网规则)以及与之匹配的链接来抓取"类别"和"子类别"列表内的链接.product.php?id=\d+
使用回调的正则表达式parse_product_page()
- 最终会刮掉产品数据.
如你所见,非常强大的东西.=)
归档时间: |
|
查看次数: |
5623 次 |
最近记录: |