尝试让Scrapy抓取多个域。我让它简单地工作,但有些事情发生了变化,我不知道是什么。我的理解是" CrawlSpider"有关要遵循哪些链接的规则应遵循任何允许的链接,直到深度设置或域耗尽。
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"
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,此代码就可以正常工作。如果我添加多个,蜘蛛只会抓取起始页。
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: 如果我将解析函数移到课外,它没有问题。问题是我不能以那种方式输出任何东西。在类中使用parse函数(即使它只是填充了pass)导致只请求起始页和robot.txt
答案 0 :(得分:0)
不确定为什么,但如果我将规则回调更改为callback ='parse_link'并重命名该函数以匹配,一切正常。代码看起来应该如下所示:
Couldn't find remote ref HEAD
编辑:请参阅下面的Chetan mishra的评论。我显然没有仔细查看文档。
答案 1 :(得分:0)
我想当你使用 callback ='parse'时,它会回退到内置的解析方法。 您可以尝试使用 callback ='self.parse'吗? 这可能会触发您的解析方法而不是默认方法