Python-запросы не возвращают полностью загруженный контент - PullRequest
0 голосов
/ 20 июня 2019

Попытка получить размеры от здесь .

Содержание, которое я хочу:

enter image description here

ОднакоЯ получаю:

[<div class="options" id="productSizeStock">
<button class="btn options-loading" disabled="" type="button">
</button>
<button class="btn options-loading" disabled="" type="button">
</button>
<button class="btn options-loading" disabled="" type="button">
</button>
<button class="btn options-loading" disabled="" type="button">
</button>
<button class="btn options-loading" disabled="" type="button">
</button>
<button class="btn options-loading" disabled="" type="button">
</button>
<button class="btn options-loading" disabled="" type="button">
</button>
<button class="btn options-loading" disabled="" type="button">
</button>
<button class="btn options-loading" disabled="" type="button">
</button>
<button class="btn options-loading" disabled="" type="button">
</button>
<button class="btn options-loading" disabled="" type="button">
</button>
<button class="btn options-loading" disabled="" type="button">
</button>

Я также попытался использовать requests-html, чтобы проверить, была ли это проблема с отображением JavaScript.Но я только что получил пустые значения.

Вот мой код:

import requests
import randomheaders
from bs4 import BeautifulSoup

proxy = {'''PROXY'''}
while True:
    try:
        source = requests.get("https://www.size.co.uk/product/grey-nike-air-max-98-se/132114/", proxies= proxy, headers=randomheaders.LoadHeader(),timeout=30).text
        soup = BeautifulSoup(source, features = "lxml")
        print(soup.find_all("div", class_="options"))

    except Exception as e:
        print(e)

    time.sleep(5)

Ответы [ 2 ]

0 голосов
/ 20 июня 2019

с технической точки зрения ваш код правильный.Поскольку этот веб-сайт использует Javascript для визуализации самого себя, размер сохраняется по другому URL-адресу, а именно:

https://www.size.co.uk/product/grey-nike-air-max-98-se/132114/stock

, поскольку вы можете просто добавить / stock кВаш начальный URL.


При этом попробуйте заменить это:

source = requests.get("https://www.size.co.uk/product/grey-nike-air-max-98-se/132114/", proxies= proxy, headers=randomheaders.LoadHeader(),timeout=30).text
soup = BeautifulSoup(source, features = "lxml")
print(soup.find_all("div", class_="options"))

на:

source = requests.get("https://www.size.co.uk/product/grey-nike-air-max-98-se/132114/stock", proxies= proxy, headers=randomheaders.LoadHeader(),timeout=30).text
soup = BeautifulSoup(source, features = "lxml")
sizes = [x["title"].replace("Select Your UK Size ","") for x in soup.find_all("button",{"data-e2e":"product-size"})]
print(sizes)

Где sizes - список, содержащий всеразмеров и имеет следующий вывод:

['6', '7', '7.5', '8', '8.5', '9', '9.5', '10', '10.5', '11', '11.5', '12']

Надеюсь, это поможет!

0 голосов
/ 20 июня 2019

Возможно, потому что информация, которую вы ищете, динамически добавляется клиентским скриптом (в данном случае JS). Я не вижу простого способа получить информацию просто с помощью requests, если это так, возможно, вам следует лучше проанализировать сценарии страницы и, если это действительно мотивировано, выполнить правильные AJAX запросы.

Итак, резюмируя, вы не получаете правильные результаты, потому что любой сгенерированный JS контент должен отображаться в документе. Когда вы выбираете страницу HTML, вы выбираете только исходный документ.

Возможное решение (решение для только для Python 3.6 ) заключается в использовании запросы-HTML вместо запросов :

Эта библиотека намеревается сделать анализ HTML (например, просмотр веб-страниц) максимально простым и интуитивно понятным.

  1. Установить запросы-html: pipenv install requests-html

  2. Сделать запрос на URL страницы:

    from requests_html import HTMLSession
    
    session = HTMLSession()
    r = session.get(a_page_url)
    
  3. Визуализация ответа для получения сгенерированных Javascript битов:

    r.html.render()
    

Этот модуль предлагает чистку и поддержку JavaScript, это именно то, что вам нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...