#python #json #web-scraping #beautifulsoup
#python #json #очистка веб-страниц #прекрасный суп
Вопрос:
Моя проблема в том, что параметры должны сдвигаться, чтобы перейти к следующим 10 обзорам, и повторяться до тех пор, пока для игры не останется больше отзывов. Однако цикл печатает одни и те же 10 отзывов снова и снова, не переходя к следующим 10. Вот приведенный ниже код. Спасибо
def review_scraper():
from alive_progress import alive_bar
import re
start_time = time.time()
url = "https://steamcommunity.com/app/933110/homecontent/"
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.67 Safari/537.36'}
regex = re.compile('apphub_CardContentAuthorName')
for x in range(1, 5):
offset = (x*10) - 10
payload = {
'userreviewsoffset': offset,
'p': x,
'workshopitemspage': x,
'readytouseitemspage': x,
'mtxitemspage': x,
'itemspage': x,
'screenshotspage': x,
'videospage': x,
'artpage': x,
'allguidepage': x,
'webguidepage': x,
'integratedguidepage': x,
'discussionspage': x,
'numperpage': '10',
'browsefilter': 'mostrecent',
'browsefilter': 'mostrecent',
'l': 'english',
'appHubSubSection': '10',
'filterLanguage': 'default',
'searchText': '',
'forceanon': '1'}
page = requests.get(url, headers=headers, params=payload)
soup = BeautifulSoup(page.text, "html.parser")
cards = soup.find_all('div',{'class':'apphub_Card modalContentLink interactable'})
y = 0
for card in cards:
title = card.find('div',{'class':'title'}).text
hours = card.find('div',{'class':'hours'}).text
content = card.find('div',{'class':'apphub_CardTextContent'}).text.strip()
author = card.find('div',{'class':regex}).text
print(title 'n' hours 'n' content 'nn' 'Author: ' author 'n' '#'*50)
y = y 1
print("--- %s seconds ---" % (time.time() - start_time))
print(y)
Ответ №1:
Так что, если у кого-то такая же проблема, как и у меня, я нашел решение. Вот код, приведенный ниже.
def review_scraper():
from alive_progress import alive_bar
import re
import json
start_time = time.time()
z = 0
url = "https://store.steampowered.com/appreviews/933110?json=1amp;cursor=*"
response = requests.get(url).json()
tot_reviews = (response['query_summary']['total_reviews'])
pages_to_iterate = tot_reviews/20
pages_to_iterate = round(int(pages_to_iterate))
cursor = "*"
for i in range(20):
url = "https://store.steampowered.com/appreviews/933110?json=1amp;cursor=" str(cursor)
response = requests.get(url).json()
reviews = (response['reviews'])
cursor = (response['cursor'])
for x in range(response['query_summary']['num_reviews']):
print(reviews[x]['review'])
z = z 1
print(z)
Единственная проблема заключается в том, что после примерно 200 обзоров он начнет повторять одни и те же обзоры. Это проблема с тем, что курсор не находит следующий раздел вокруг этой отметки. Однако этот код поможет вам на вашем пути.