Найти - Пользователи
Полная версия: Не находит Xpath
Начало » Python для новичков » Не находит Xpath
1
Soures21
 g = Grab()
g.go('https://cs.money/')
print(g.xpath("//div[@class='offer_container_inventory_steam']/div[3]/div[1]/div[@class='price']").text_content())

По поиску все верно. В чем ошибка?


aiscy
Попробуйте отключить JavaScript в браузере и найти
Soures21
aiscy
Попробуйте отключить JavaScript в браузере и найти
Теперь не находит. А разве Python не работает с JS? И как сделать что-бы он прогружал?
aiscy
Soures21
Теперь не находит. А разве Python не работает с JS? И как сделать что-бы он прогружал?
Для этого вам нужно будет сначала отрендерить нужную страницу через Splash, Selenium, или что-то другое, что умеет рендерить JS.
Не знаю, что у вас за задача, но предположу, что получить ценники на товары, которые предлагают боты.
Сначала стоит посмотреть, как вообще сайт подгружает цены. Для этого заходим на сайт, открываем панель разработчика и смотрим в сетевые запросы. Ищем XHR запрос, затем открываем его и проверяем, что это то, что нам нужно. Затем смотрим, как он строится. Посмотреть это можно в файле worker_load_inventory.js
 var xhr = new XMLHttpRequest();
xhr.open('GET', '/load_all_bots_inventory?hash=' + +new Date(), false);
xhr.send();
Ну и на основании этого запроса пишем наш код:
 import requests
import datetime
from pprint import pprint
def main():
    response = requests.get('https://cs.money/load_all_bots_inventory',
                            params={'hash': '{:.0f}'.format(datetime.datetime.now().timestamp() * 1000)})
    dct = response.json()  # Делаем что-нибудь с нашими данными
    with open('file.txt', 'w', encoding='utf-8') as f:  
        pprint(dct, stream=f)  # Например сохраняем в файл
if __name__ == '__main__':
    main()
Soures21
aiscy
Протестировал ваш метод, действительно все работает, большое спасибо ) но как мне кажется выводится далеко не вся база. (Выводится только выборочные 500-600 предметов)
Как работать со все базой ?
Делаю вот так вот
 import requests
import datetime
from pprint import pprint
def main():
    response = requests.get('https://cs.money/load_all_bots_inventory',
                            params={'hash': '{:.0f}'.format(datetime.datetime.now().timestamp() * 1000)})
    dct = response.json() 
    g = len(dct['1978tolik58'])
    for i in range(0,g):
        print(dct['1978tolik58'][i]['m'])
        print(dct['1978tolik58'][i]['p'])
if __name__ == '__main__':
    main()
aiscy
Soures21
но как мне кажется выводится далеко не вся база. (Выводится только выборочные 500-600 предметов)
 import requests
from datetime import datetime
from pprint import pprint
def main():
    response = requests.get('https://cs.money/load_all_bots_inventory',
                            params={'hash': '{:.0f}'.format(datetime.now().timestamp() * 1000)})
    data = response.json()
    names = data.keys()
    for name in names:
        print('{} содержит {} записей'.format(name, len(data[name])))
        with open('{}.txt'.format(name), 'w', encoding='utf-8') as f:
            pprint(data[name], stream=f)
if __name__ == '__main__':
    main()
Немного поменял для наглядности
А дальше как-то так:
 data = response.json()
    for name in data:
        for weapon in data[name]:
            print(weapon['m'])
Soures21
aiscy
большое спасибо, очень помогли. Могу отблагодарить и отправить на Qiwi?
aiscy
Soures21
большое спасибо, очень помогли. Могу отблагодарить и отправить на Qiwi?
Я не против, на email написал.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB