Попытка заставить 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)
и если бы я хотел сканировать несколько доменов, я быизмените значения «allow_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», сканер получает только исходные сайты, а затем завершает работу.
edit:
хорошо, этот код работает, пока есть только 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
edit # 2: если я переместу функцию разбора за пределы класса, это не сработает.Проблема в том, что я не могу ничего выводить таким образом.наличие функции parse в классе (даже если она просто заполнена pass) приводит только к запросу стартовых страниц и robot.txt