У меня есть сволочь, которая может успешно войти на ancestry.com.Затем я использую эту аутентифицированную сессию для возврата новой ссылки и могу успешно очистить первую страницу новой ссылки.Проблема возникает, когда я пытаюсь перейти на вторую страницу.Я получаю отладочное сообщение 302 перенаправления, и этот URL: https://secure.ancestry.com/error/reqvalidation.aspx?aspxerrorpath=http%3a%2f%2fsearch.ancestry.com%2ferror%2fPageNotFound&msg=&ti=0>.
Я следовал документации и следовал некоторым рекомендациям здесь, чтобы получить меня далеко.Нужен ли токен сеанса для каждой страницы?Если да, то как мне это сделать?
import scrapy
from scrapy import Request
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
from scrapy.http import FormRequest
from scrapy.loader import ItemLoader
from ..items import AncItem
class AncestrySpider(CrawlSpider):
name = 'ancestry'
def start_requests(self):
return[
FormRequest(
'https://www.ancestry.com/account/signin?returnUrl=https%3A%2F%2Fwww.ancestry.com',
formdata={"username": "foo", "password": "bar"},
callback=self.after_login
)
]
def after_login(self, response):
if "authentication failed".encode() in response.body:
self.log("Login failed", level=log.ERROR)
return
else:
return Request(url='https://www.ancestry.com/search/collections/nypl/?name=_Wang&count=50&name_x=_1',
callback=self.parse)
def parse(self, response):
all_products = response.xpath("//tr[@class='tblrow record']")
for product in all_products:
loader = ItemLoader(item=AncItem(), selector=product, response=response)
loader.add_css('Name', '.srchHit')
loader.add_css('Arrival_Date', 'td:nth-child(3)')
loader.add_css('Birth_Year', 'td:nth-child(4)')
loader.add_css('Port_of_Departure', 'td:nth-child(5)')
loader.add_css('Ethnicity_Nationality', 'td:nth-child(6)')
loader.add_css('Ship_Name', 'td:nth-child(7)')
yield loader.load_item()
next_page = response.xpath('//a[@class="ancBtn sml green icon iconArrowRight"]').extract_first()
if next_page is not None:
next_page_link = response.urljoin(next_page)
yield scrapy.Request( url=next_page_link, callback=self.parse)
Я устал добавлять информацию заголовка запроса.Я попытался добавить информацию о куки в заголовок запроса, но это не сработало.Я пытался использовать только агенты USER, которые перечислены в пакетах POST.
Сейчас я получаю только 50 результатов.Я должен получить сотни после сканирования всех страниц.