request-html возвращает неверную страницу с правильным URL - PullRequest
0 голосов
/ 01 октября 2018

У меня была практика очистки пакета reports-html под python 3.6.Я пробовал соответствующие веб-сайты, но только один, Стихи.ру, https://www.poetryfoundation.org/poems/browse#page=1&sort_by=recently_added&topics=20, возвращает неверную страницу.Я продемонстрирую это подробно.

Вот исходный код, код, который просто импортирует запросы-html и возвращает стихи, который обернут в :
из запросов_html импорт HTMLSession

class Scrapy:
    def __init__(self, session):
        self.session = session

    def request_content(self, url):
        page = self.session.get(url)
        results = page.html.find('div.c-feature')
        a = True
if __name__ == '__main__':
    session = HTMLSession()
    scrapy = Scrapy(session)

    url = 'https://www.poetryfoundation.org/poems/browse#page=1&sort_by=recently_added&topics=20'
    scrapy.request_content(url=url)

независимо от того, каким параметром я изменяю параметр в URL, он просто вернет одну неверную страницу

Спасибо за ваше время

1 Ответ

0 голосов
/ 02 октября 2018

это другая страница при использовании requests и selenium, потому что веб-сайт использует JavaScript для обработки данных

from selenium import webdriver
import requests
url = 'https://www.poetryfoundation.org/poems/browse#page=1&sort_by=recently_added&topics=20'
if __name__ == '__main__':
    with requests.Session() as ses:
        headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.92 Safari/537.36",
        "Accept": "*/*",
        "Referer": "https://www.poetryfoundation.org/poems/browse",
        "Accept-Encoding": "gzip, deflate, br",
}

        req = ses.get(url,headers=headers)
        A = req.text

    dr = webdriver.PhantomJS()
    dr.get(url)
    B = dr.page_source
    dr.close()
    print(type(A) == type(B))
    print(A == B)
    print(len(A),len(B))

Вывод

True # type(A) == type(B)
False # A == B
365477 482831
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...