Аутентифицированная паутинка паука. 302 редирект. reqvalidation.asps - страница не найдена - PullRequest
0 голосов
/ 01 мая 2019

У меня есть сволочь, которая может успешно войти на 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 результатов.Я должен получить сотни после сканирования всех страниц.

1 Ответ

0 голосов
/ 03 мая 2019

Нашел решение.Это не имеет ничего общего с аутентификацией на сайте.Мне нужно было найти другой подход к нумерации страниц.Я использовал URL страницы для разбивки на страницы вместо перехода по ссылке «следующая страница».

...