Удаление обзоров Steam со страницы XMR, не переходя к остальным обзорам

#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 обзоров он начнет повторять одни и те же обзоры. Это проблема с тем, что курсор не находит следующий раздел вокруг этой отметки. Однако этот код поможет вам на вашем пути.