Scrapy Spider не может подключиться при работе через main, но не имеет проблем, когда это делается через терминал.Python

Программы на Python
Ответить
Anonymous
 Scrapy Spider не может подключиться при работе через main, но не имеет проблем, когда это делается через терминал.

Сообщение Anonymous »

В основном название. По какой -то неизвестной причине у одного из моих пауков возникает проблемы с подключением к URL, когда я добавляю его в свой сценарий, но ни один, если это использует команду Scrapy Crawl на терминале. В обоих случаях я пытаюсь соскрести одинаковое количество данных, используя одинаковые настройки, и я даже пытался удалить других своих пауков из сценария, чтобы увидеть, не мешали ли они друг другу, но не могли его решить. < /p>
Эти два являются примером кодов для моего дефектного паука и моего основного файла < /p>
main: < /p>
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,
}

Когда я использую на терминале только паука, я просто комментирую всю функцию инициализации, просто создаю локальную переменную со всеми именами и комментирую части, связанные с общей_датой, но использование локальной переменной для имен в пауке по умолчанию, очевидно, ничего не решило, так что у меня совершенно нет идей по этому поводу.
Не думаю, что это будет особенно полезно, но просто в случае, вот журналы, когда мой паук преуспевает в терминале и когда он происходит сбой в сценарии:
2025-01-23 11:42:38 [scrapy.core.engine] DEBUG: Crawled (200) (referer: None)

ERROR: Gave up retrying (failed 3 times): []


Подробнее здесь: https://stackoverflow.com/questions/793 ... lem-when-d
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»