Модуль Python Request - Отображение дополнительных результатов - PullRequest
0 голосов
/ 08 июня 2018

В настоящее время я работаю над проектом для учеников по созданию веб-страниц. Я выбрал свой сайт:

https://www.game.co.uk/en/m/games/best-selling-games/best-selling-xbox-one-games/?merchname=MobileTopNav-_-XboxOne_Games-_-BestSellers#Page0

На этой странице есть кнопкав нижней части, где отображается список следующих 10 продуктов без нажатия этой кнопки, не отображается следующая партия продуктов, однако при нажатии кнопки URL-адрес не изменяется.

Я хотел спросить, какЯ решу эту дилемму, используя модуль запросов.

Мой код ниже:

import requests
from bs4 import BeautifulSoup

r = requests.get("https://www.game.co.uk/en/m/games/best-selling-games/best-selling-xbox-one-games/?merchname=MobileTopNav-_-XboxOne_Games-_-BestSellers")
c = r.content

soup = BeautifulSoup(c,"html.parser")
all=soup.find_all("div",{"class":"product"})

for item in all:
    print(item.find({"h2": "productInfo"}).text.replace('\h2','').replace(" ", ""))
    print(item.find("span",{"class": "condition"}).text + "  " + item.find("span",{"class": "value"}).text )
    try:
        print(item.find_all("span",{"class": "condition"})[1].text + "  " + item.find_all("span",{"class": "value"})[1].text )
    except:
        print("No Preowned")
    print("  ")

Ответы [ 2 ]

0 голосов
/ 08 июня 2018

Попробуйте этот код, чтобы получить все элементы, доступные на этой странице.Вы можете использовать инструменты разработчика Chrome для извлечения этого URL , в котором есть опция для увеличения номера страницы.

from bs4 import BeautifulSoup 
import requests

page_link = "https://www.game.co.uk/en/m/games/best-selling-games/best-selling-xbox-one-games/?merchname=MobileTopNav-_-XboxOne_Games-_-BestSellers&pageNumber={}&pageMode=true"

page_no = 0

while True:
    page_no+=1
    res = requests.get(page_link.format(page_no))
    soup = BeautifulSoup(res.text,'lxml')
    container = soup.select(".productInfo h2")
    if len(container)<=1:break 

    for content in container:
        print(content.text)

Вывод нескольких последних заголовков:

ARK Survival Evolved
Kingdom Come Deliverance Special Edition
Halo 5 Guardians
Sonic Forces
The Elder Scrolls Online: Summerset - Digital
0 голосов
/ 08 июня 2018

вам нужно использовать веб-сканер, который поддерживает выполнение javascript / jquery - т.е. selenium (он использует BoutifulSoup под капотом) Проблема, с которой вы сталкиваетесь, заключается в том, что контент, к которому вы пытаетесь получить доступ, создается динамически черезJavaScript, когда упомянутая кнопка нажата.Когда вы запрашиваете страницу, дополнительные HTML-элементы, которые вы хотите прочитать, не создаются, поэтому BoutifulSoup не может их найти.Используя селен, вы можете нажимать кнопки / заполнять формы и многое другое.Вы также можете подождать, пока сервер создаст контент, к которому вы хотите получить доступ.

Документация по selenium должна объясняться само собой ...

...