Scrapy не сохраняет куки для некоторых страниц - PullRequest
0 голосов
/ 24 ноября 2018

Я пытаюсь разобрать статьи с этого сайта: https://derstandard.at/r2000026008978/Wirtschaftspolitik?_chron=t

При первом посещении веб-сайта вам предлагается принять файлы cookie.Кажется, что они хранят согласие в DSGVO_ZUSAGE_V1:true, потому что когда я чищу это, оно работает:

def start_requests(self):
    urls = [
        'https://derstandard.at/r2000026008978/Wirtschaftspolitik?_chron=t'
    ]
    for url in urls:
        yield scrapy.Request(url=url, callback=self.parse,
                              cookies={'DSGVO_ZUSAGE_V1':'true'})

def parse(self, response):
    base_query = '//div[contains(@class,"contentLeft")]/ul[contains(@class, "stories")]/li'
    articles = response.xpath(base_query)
    for index, value in enumerate(articles):
        article_url = validateResponse(response,
                                       base_query + '/div[contains(@class,"text")]/h3/a/@href',
                                       index)
        request = scrapy.Request(response.urljoin(article_url), callback=self.parseSingleArticle, cookies={'DSGVO_ZUSAGE_V1':'true'})
        yield request

def parseSingleArticle(self, response):
    article_content = ''
    article_date = validateResponse(response, "//h6[contains(@class,'info')]/span[contains(@class,'date')]/text()")
    article_title = validateResponse(response, "//h1[contains(@itemprop,'headline')]/text()")
    query = "//div[contains(@class,'copytext')]//child::text()"
    article_content_response = response.xpath(query)
    for index, value in enumerate(article_content_response):
        article_content += " " + validateResponse(response, query, index)
    yield self.article_to_pipeline(article_content, response.url, article_date, article_title)

def article_to_pipeline(self, article_content, url, article_date, article_title):
    article_item = ArticleItem()
    # some other stuff
    return article_item

И для некоторых статей это работает идеально.Из отладки:

2018-11-24 10:01:58 [scrapy.downloadermiddlewares.cookies] DEBUG: Sending cookies to: <GET https://derstandard.at/2000091420120/60-Stunden-pro-Woche-Fuer-Unternehmer-ist-das-die-Realitaet>
Cookie: DSGVO_ZUSAGE_V1=true; MGUID=GUID=e2b4bb79-069f-4778-8062-f34d7b3d2b9d&Timestamp=2018-11-24T09:01:52&DetectedVersion=Web&Version=&Hash=4F3A498256857F21390A3DD636588B38

И я получаю все, что хотел для этой статьи.

Но есть некоторые статьи, где это не работает.Например, это ничего не возвращает:

2018-11-24 10:02:07 [scrapy.downloadermiddlewares.cookies] DEBUG: Sending cookies to: <GET https://derstandard.at/2000090136491/Lufthunderter-fuer-E-Autos-faellt>
Cookie: DSGVO_ZUSAGE_V1=true; MGUID=GUID=e2b4bb79-069f-4778-8062-f34d7b3d2b9d&Timestamp=2018-11-24T09:01:52&DetectedVersion=Web&Version=&Hash=4F3A498256857F21390A3DD636588B38

Также, когда я захожу на этот сайт через Chrome, я получаю «Принять приглашение куки».Несмотря на то, что он принял этот файл cookie ранее для какой-то другой страницы на их сайте.Когда я делаю это, они снова сохраняют подтверждение в DSGVO_ZUSAGE_V1:true и MGUID (удаление их из Chrome возвращает «принять приглашение к cookie»).

У кого-нибудь есть идеи?Я пробовал другие куки, но MGUID и DSGVO_ZUSAGE_V1 - единственные, которые имеют значение.

...