Очистка XMR с помощью Python

#python #json #web-scraping #beautifulsoup

#python #json #веб-очистка #beautifulsoup

Вопрос:

Я пытаюсь очистить эту страницу: https://store.steampowered.com/search/results/?queryamp;start=0amp;count=50amp;dynamic_data=amp;sort_by=_ASCamp;snr=1_7_7_7000_7amp;filter=topsellersamp;infinite=1

Я попытался использовать beautiful soup, но там написано: TypeError: unhashable тип: ‘slice’ Эта ошибка возникает в строке синтаксического анализа. Я не могу использовать обычную страницу для создания красивого супа, так как функция очистки всего занимает слишком много времени. Мне нужно получить информацию для каждого элемента, такую как название игры, дата выпуска, скидка, цена и URL-адрес через эту страницу.

Вот мой код

     browser = webdriver.Chrome(ChromeDriverManager().install(), options=options)
    browser.get("https://store.steampowered.com/search/results/?queryamp;start=0amp;count=50amp;dynamic_data=amp;sort_by=_ASCamp;snr=1_7_7_7000_7amp;filter=topsellersamp;infinite=1")
    url = browser.current_url
    page = requests.get(url)
    data = page.json()
    soup = BeautifulSoup(data, "html.parser")
 

Ответ №1:

Нет необходимости использовать selenium (слишком медленно).

Шаги просты: проанализируйте json и преобразуйте results_html в soup:

 import requests
from bs4 import BeautifulSoup

url = 'https://store.steampowered.com/search/results/?queryamp;start=0amp;count=50amp;dynamic_data=amp;sort_by=_ASCamp;snr=1_7_7_7000_7amp;filter=topsellersamp;infinite=1'
response = requests.get(url)
soup = BeautifulSoup(response.json()['results_html'], "html.parser")
for game_info in soup.find_all(class_="search_result_row ds_collapse_flag"): # iterate this
    print("url: ",game_info.get("href"))
    print("name: ", game_info.find(class_="title").text.strip())
    print("Released: ", game_info.find(class_="search_released").text.strip())
    for price in game_info.find(class_="search_price"): # filter origin price.
        if price and price.name != 'span': # just check the tag.
            real_price = price
    print("Price: ", real_price.strip())
    discount = game_info.find(class_="search_discount").text.strip()
    if discount: # check whether discount exists
        print("Discount: ", discount)
    else:
        print("No discount")
    print()
 

С принтами:

 url:  https://store.steampowered.com/app/1091500/Cyberpunk_2077/?snr=1_7_7_7000_150_1
name:  Cyberpunk 2077
Released:  9 Dec, 2020
Price:  ¥ 298
No discount

url:  https://store.steampowered.com/app/578080/PLAYERUNKNOWNS_BATTLEGROUNDS/?snr=1_7_7_7000_150_1
name:  PLAYERUNKNOWN'S BATTLEGROUNDS
Released:  21 Dec, 2017
Price:  ¥ 98
No discount

url:  https://store.steampowered.com/app/431960/Wallpaper_Engine/?snr=1_7_7_7000_150_1
name:  Wallpaper Engine
Released:  16 Nov, 2018
Price:  ¥ 19
No discount

url:  https://store.steampowered.com/app/1404210/Red_Dead_Online/?snr=1_7_7_7000_150_1
name:  Red Dead Online
Released:  4 Dec, 2020
Price:  ¥ 35
No discount

url:  https://store.steampowered.com/app/1406990/NEKOPARA_Vol_4/?snr=1_7_7_7000_150_1
name:  NEKOPARA Vol. 4
Released:  26 Nov, 2020
Price:  ¥ 33
Discount:  -11%
.....