【发布时间】:2018-11-12 23:57:26
【问题描述】:
试图让 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 函数移到类之外,它就没有问题。问题是我不能以这种方式输出任何东西。在类中使用 parse 函数(即使它只是用 pass 填充)导致只请求起始页和 robots.txt
【问题讨论】:
标签: python-3.x scrapy