首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Scrapy Crawler多个域在检索源页面后没有错误地完成

Scrapy Crawler多个域在检索源页面后没有错误地完成
EN

Stack Overflow用户
提问于 2018-06-03 21:59:28
回答 1查看 375关注 0票数 1

尝试让Scrapy抓取多个域。我让它工作了很短时间,但有些东西改变了,我不知道是什么。我的理解是,带有规则的"CrawlSpider“应该遵循任何允许的链接,直到深度设置或域名耗尽。

代码语言:javascript
复制
import scrapy
from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor

class BbcSpider(CrawlSpider):
    name = 'bbcnews'
    allowed_domains = [
        'www.bbc.com']

    start_urls = [
        'http://www.bbc.com/news']

    rules = (Rule(LinkExtractor(allow=()), callback='parse', follow=True),)

    def parse(self, response):
        print(response.url)

如果我想抓取多个域,我会修改"allowed_domains“和"start_urls”

代码语言:javascript
复制
     allowed_domains = [
        'www.bbc.com',
        'www.voanews.com']

    start_urls = [
        'http://www.bbc.com/news',
        'https://www.voanews.com/p/6290.html']

然而,在这两种情况下,当我运行"scrapy crawl bbcnews“时,爬虫只检索源站点,然后退出。

编辑:

好的,只要只有1个域和1个起始URL,这个代码就可以工作。如果我添加了两个以上的页面,爬行器只会爬行起始页面。

代码语言:javascript
复制
import scrapy
from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor

class BbcfarsiSpider(CrawlSpider):
    name = 'bbcfarsi'
    allowed_domains = ['bbc.com']
    start_urls = ['http://bbc.com/persian']
    rules = (Rule(LinkExtractor(allow=('persian'),), callback='parse', follow=True), )

def parse(self, response):
    pass

编辑#2:如果我将解析函数移到类之外,它可以正常工作。这样做的问题是我无法以这种方式输出任何内容。在类中使用解析函数(即使只是用pass填充)会导致只请求起始页和robot.txt

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50667184

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档