При запуске Scrapy из собственного скрипта, который загружает URL-адреса из БД и следит за всеми внутренними ссылками на этих сайтах, я сталкиваюсь с жалостью. Мне нужно знать, какой start_url используется в настоящее время, так как я должен поддерживать согласованность с базой данных (SQL DB). Но: когда Scrapy использует встроенный список, называемый start_urls, чтобы получить список ссылок, по которым нужно перейти, и эти веб-сайты имеют немедленное перенаправление, возникает проблема. Например, когда запускается Scrapy и сканируется start_urls, а сканер отслеживает все находящиеся там внутренние ссылки, позже я могу определить только посещаемый в настоящее время URL-адрес, а не start_url, с которого начинался Scrapy.
Другие ответы из Интернета неверны, для других случаев использования или устарели, поскольку в прошлом году в коде Scrapy, по-видимому, произошли изменения.
MWE:
from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor
from scrapy.crawler import CrawlerProcess
class CustomerSpider(CrawlSpider):
name = "my_crawler"
rules = [Rule(LinkExtractor(unique=True), callback="parse_obj", ), ]
def parse_obj(self, response):
print(response.url) # find current start_url and do something
a = CustomerSpider
a.start_urls = ["https://upb.de", "https://spiegel.de"] # I want to re-identify upb.de in the crawling process in process.crawl(a), but it is redirected immediately # I have to hand over the start_urls this way, as I use the class CustomerSpider in another class
a.allowed_domains = ["upb.de", "spiegel.de"]
process = CrawlerProcess()
process.crawl(a)
process.start()
Здесь я предоставляю MWE, где Scrapy (мой сканер) получает список URL, как я должен это сделать. Пример URL-адреса перенаправления: https://upb.de, который перенаправляет на https://uni -paderborn.de .
Я ищу элегантный способ справиться с этим, поскольку хочу использовать многочисленные функции Scrapy, такие как параллельное сканирование и т. Д. Таким образом, я не хочу использовать что-то вроде библиотеки запросов дополнительно. Я хочу найти Scrapy start_url, который в настоящее время используется внутри (в библиотеке Scrapy).
Я ценю вашу помощь.