CrawlSpider-有关LinkExtractor规则的问题

时间:2018-08-02 09:24:53

标签: python scrapy

在Python 3.6中,我的CrawlSpider(Linkextractor中的Rule)有一个小问题。目前,我正在编写用于从路透社网站下载文章的代码。

借助一些软件包文档,书籍和其他在线资源,我能够为每个网站编写标题和文本的下载公式。不幸的是,我在过滤生成的URL时遇到问题。

使用以下代码,我从路透社生成所有可能的链接:

import scrapy
from scrapy.contrib.linkextractors import LinkExtractor
from scrapy.contrib.spiders import CrawlSpider, Rule
class ArticleSpider(CrawlSpider):
name = 'articles'
allowed_domains = ['reuters.com']`
start_urls = ['https://www.reuters.com/']

rules = [Rule(LinkExtractor(allow=r'.*'), callback='parse_items',
        follow=True)]

一切都在这里正常工作。但是,我想将生成的URL限制为包含“文章”的URL:

https://www.reuters.com/article/us-asia-economy-rates/select-few-emerging-asian-economies-comfortable-with-fed-hikes-idUSKBN1JD0Z0

https://in.reuters.com/article/turkey-politics-markets/in-turkeys-economic-plan-investors-see-drive-for-votes-not-discipline-idINL8N1402LI20151211

我想在LinkExtractor / Rule中添加限制,即该限制只能使用带有/ article /短语的URL。我尝试使用各种选项来做到这一点,从最基本的选项开始,例如“允许并以if函数结束一些更复杂的操作。不幸的是,在每种情况下,spider都在几秒钟内完成,并且生成的链接很少。

我尝试了以下选项:

rules = [Rule(LinkExtractor(allow=r'article.*',),follow=True)]

rules = [Rule(LinkExtractor(allow='^(article)((?!:).)*$'),  callback='parse_items', follow=True),]

rules = [Rule(LinkExtractor(allow='article.*',),follow=True)]

以及其他参数(is_article):

rules = [Rule(LinkExtractor(allow='^article.*'),
        callback='parse_items', follow=True,
        cb_kwargs={'is_article': True}),
        Rule(LinkExtractor(allow='.*'), callback='parse_items',
        cb_kwargs={'is_article': False})]

但这没有帮助。

当我生成没有任何限制的链接时,我会收到大量的链接,这些链接也包含在/ article /内部。我检查了一下,然后比较了URL的数量。我保存了所有生成的URL(无限制),导入到R中,仅选择了带有“文章”的URL。这个数字非常庞大,只有“文章”限制的蜘蛛会在几秒钟后完成:/因此,我得出结论认为一定有问题。

最有可能的是,我在某个地方犯了一个小错误,或者我只是不完全理解“ allow”功能。这是我第一次使用Python,因此,请您提供一些小的帮助和理解。对于所有提示,我将不胜感激。

谢谢!

致以诚挚的问候

自拍

P.S。

我不知道这是否重要,我在Windows和Anaconda 3-5.20上使用Python 3.6。

0 个答案:

没有答案