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

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

Сообщение Anonymous »

В основном заголовок. По какой-то неизвестной причине у одного из моих пауков возникают проблемы с подключением к 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) 

Код: Выделить всё

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»