В основном заголовок. По какой-то неизвестной причине у одного из моих пауков возникают проблемы с подключением к URL-адресу, когда я добавляю его в свой скрипт, но ни одна из них не возникает, когда я делаю это с помощью команды ScrapCraw на терминале. В обоих случаях я пытаюсь собрать один и тот же объем данных, используя одни и те же настройки, и даже пытался удалить других пауков из сценария, чтобы посмотреть, не мешают ли они друг другу, но не смог решить проблему.
Эти два примера кода для моего неисправного паука и моего основного файла.
Основной:
import scrapy
from scrapy.utils.project import get_project_settings
from scrapy.crawler import CrawlerProcess
from ProjectFolder import Examplespider1
from ProjectFolder import Examplespider2
if __name__ == "__main__":
shared_data = {
"names": list_of_names,
"results": {
"spider1": {},
"spider2": {},
}
}
search_term = 'example'
settings = get_project_settings()
process = CrawlerProcess(settings)
process.crawl(Examplespider1, shared_data=shared_data, process_name=search_term)
process.crawl(Examplespider2, shared_data=shared_data, process_name=search_term)
process.start()
spider1_results = shared_data["results"]["spider1"]
spider2_results = shared_data["results"]["spider2"]
#do something with the data
< /code>
Проблема Spider: < /p>
import scrapy
class Examplespider1(scrapy.Spider):
name = "spider1"
allowed_domains = ["exampledomain.com"]
start_urls = ["https:exampledomain.com/something"]
def __init__(self, shared_data, process_name, *args, **kwargs):
super().__init__(*args, **kwargs)
self.shared_data = shared_data
self.process_name = process_name
def parse(self, response):
view_state = response.xpath('//input[@name="javax.faces.ViewState"]/@value').get()
if not view_state:
self.log("Não foi possível encontrar javax.faces.ViewState na página inicial.", level=scrapy.log.ERROR)
return
names = self.shared_data["names"]
for name in names:
form_data = {
formdata
}
yield scrapy.FormRequest(
url=self.start_urls[0],
formdata=form_data,
callback=self.parsesearch,
cb_kwargs={'name': name}
)
def parsesearch(self, response, nome_da_parte):
namespaces = {'x': 'http://www.w3.org/1999/xhtml'}
processos = response.xpath(
'//x:tbody[@id="fPP:processosTable:tb"]//x:b[@class="btn-block"]/text()',
namespaces=namespaces
).getall()
self.shared_data["results"]["spider1"][name] = processos
yield {
"Name": name,
"processos": processos,
}
< /code>
Когда я использую только паук только на терминале, я просто прокомментирую всю функцию инициации и просто создаю локальную переменную со всем Использование локальной переменной для имен в пауке по умолчанию, очевидно, ничего не решило, поэтому у меня есть идеи здесь < /p>
Не думайте, что это будет особенно полезно, но только в Случай, вот журналы, когда мой паук преуспевает в терминале, и когда он не удается при сценарии: < /p>
2025-01-23 11:42:38 [scrapy.core.engine] DEBUG: Crawled (200) (referer: None)
В основном заголовок. По какой-то неизвестной причине у одного из моих пауков возникают проблемы с подключением к URL-адресу, когда я добавляю его в свой скрипт, но ни одна из них не возникает, когда я делаю это с помощью команды ScrapCraw на терминале. В обоих случаях я пытаюсь собрать один и тот же объем данных, используя одни и те же настройки, и даже пытался удалить других пауков из сценария, чтобы посмотреть, не мешают ли они друг другу, но не смог решить проблему. Эти два примера кода для моего неисправного паука и моего основного файла. Основной: [code]import scrapy from scrapy.utils.project import get_project_settings from scrapy.crawler import CrawlerProcess from ProjectFolder import Examplespider1 from ProjectFolder import Examplespider2
def parse(self, response): view_state = response.xpath('//input[@name="javax.faces.ViewState"]/@value').get() if not view_state: self.log("Não foi possível encontrar javax.faces.ViewState na página inicial.", level=scrapy.log.ERROR) return
self.shared_data["results"]["spider1"][name] = processos yield { "Name": name, "processos": processos, } < /code> Когда я использую только паук только на терминале, я просто прокомментирую всю функцию инициации и просто создаю локальную переменную со всем Использование локальной переменной для имен в пауке по умолчанию, очевидно, ничего не решило, поэтому у меня есть идеи здесь < /p> Не думайте, что это будет особенно полезно, но только в Случай, вот журналы, когда мой паук преуспевает в терминале, и когда он не удается при сценарии: < /p> 2025-01-23 11:42:38 [scrapy.core.engine] DEBUG: Crawled (200) (referer: None) [/code] [code]ERROR: Gave up retrying (failed 3 times): [][/code]