Python Ошибка атрибута при просмотре веб-страниц для всплывающего окна - PullRequest
0 голосов
/ 17 апреля 2020

Я пытаюсь записать в Интернет записку https://steamcommunity.com/market/listings/730/AWP%20%7C%20Atheris%20%28Field-Tested%29 и извлечь данные, касающиеся цены товаров , отсортированные там Проверить в Игра ссылка.

Вы можете найти кнопку Проверка в игре , нажав всплывающее окно со стрелкой, которое появляется при перемещении курсора на изображение любого из перечисленных пунктов ниже. Мне удалось удалить данные о ценах, но по тому же методу ссылка «Проверка в игре» не очищает.

Вот мой код

from bs4 import BeautifulSoup
import requests
import re

print("Fetching Data")
url = 'https://steamcommunity.com/market/listings/730/AWP%20%7C%20Atheris%20%28Field-Tested%29'
response = requests.get(url)
# getting the source code of page response.text
data = response.text
soup = BeautifulSoup(data,'html.parser')

jobs = soup.find_all('div',{'class':re.compile('market_listing_row market_recent_listing_row listing_''\d')})


for job in jobs:
    price_tag = job.find('span',{'class':'market_listing_price market_listing_price_with_fee'})
    price = price_tag.text[8:] if price_tag else "Sold!"
    link = job.find('a',{'class':'popup_menu_item'}).get('href')
    print('PRICE : ',price,link)

Я получил ошибку AttributeError: 'NoneType' object has no attribute 'get', которая вероятно, потому что этот класс появляется в html коде, когда кто-то нажимает на кнопку со стрелкой на картинке, а в коде я не могу этого сделать. Может кто-нибудь предложить мне способ, чтобы я мог получить ссылку Inspect in Game button

1 Ответ

0 голосов
/ 17 апреля 2020

Go через API. Я считаю, что это уже не включает проданные предметы:

from bs4 import BeautifulSoup
import requests
import re
import math
import time

print("Fetching Data")

with requests.Session() as s:
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36'}

    s.get('https://steamcommunity.com/')
    cookiesDict = s.cookies.get_dict()

    headers.update({'Cookie':'sessionid=' + cookiesDict['sessionid']})

    url = 'https://steamcommunity.com/market/listings/730/AWP%20%7C%20Atheris%20%28Field-Tested%29/render/'
    payload = {
    'query':'', 
    'start': '0',
    'count': '100',
    'country': 'US',
    'language': 'english',
    'currency': '1'}


    results = {}
    jsonData = s.get(url, params=payload, headers=headers).json()
    total_count = jsonData['total_count']
    total_pages = math.ceil(total_count/100)
    for page in range(0,total_pages):
        #page=1
        time.sleep(5)    
        payload = {
            'query':'', 
            'start': '%s' %(page*100),
            'count': '100',
            'country': 'US',
            'language': 'english',
            'currency': '1'}

        jsonData = s.get(url, params=payload, headers=headers).json()
        results.update(jsonData['listinginfo'])
        print ('Aquired page %s of %s...' %(page, total_pages))


for k, v in results.items():
    price = (v['converted_price'] + v['converted_fee']) / 100
    link = v['asset']['market_actions'][0]['link']
    print('PRICE : $%.02f %s' %(price, link))

Вывод:

....
PRICE : $4.64 steam://rungame/730/76561202255233023/+csgo_econ_action_preview%20M%listingid%A%assetid%D2353320232219212327
PRICE : $4.64 steam://rungame/730/76561202255233023/+csgo_econ_action_preview%20M%listingid%A%assetid%D5237312699887394313
PRICE : $4.64 steam://rungame/730/76561202255233023/+csgo_econ_action_preview%20M%listingid%A%assetid%D17060803922484197923
PRICE : $4.64 steam://rungame/730/76561202255233023/+csgo_econ_action_preview%20M%listingid%A%assetid%D3054184006200365805
PRICE : $4.64 steam://rungame/730/76561202255233023/+csgo_econ_action_preview%20M%listingid%A%assetid%D5237312699887394313
....
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...