Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 24, 2017 17:45:17

Soures21
Зарегистрирован: 2017-01-24
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Не находит Xpath

 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())

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


Отредактировано Soures21 (Янв. 24, 2017 17:45:44)

Офлайн

#2 Янв. 24, 2017 18:18:16

aiscy
Зарегистрирован: 2015-06-17
Сообщения: 52
Репутация: +  9  -
Профиль   Отправить e-mail  

Не находит Xpath

Попробуйте отключить JavaScript в браузере и найти

Офлайн

#3 Янв. 24, 2017 21:13:05

Soures21
Зарегистрирован: 2017-01-24
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Не находит Xpath

aiscy
Попробуйте отключить JavaScript в браузере и найти
Теперь не находит. А разве Python не работает с JS? И как сделать что-бы он прогружал?

Офлайн

#4 Янв. 25, 2017 08:35:58

aiscy
Зарегистрирован: 2015-06-17
Сообщения: 52
Репутация: +  9  -
Профиль   Отправить e-mail  

Не находит Xpath

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()

Отредактировано aiscy (Янв. 25, 2017 08:51:17)

Офлайн

#5 Янв. 25, 2017 14:20:31

Soures21
Зарегистрирован: 2017-01-24
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Не находит Xpath

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()

Отредактировано Soures21 (Янв. 25, 2017 14:35:38)

Офлайн

#6 Янв. 25, 2017 14:40:58

aiscy
Зарегистрирован: 2015-06-17
Сообщения: 52
Репутация: +  9  -
Профиль   Отправить e-mail  

Не находит Xpath

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'])

Отредактировано aiscy (Янв. 25, 2017 15:05:21)

Офлайн

#7 Янв. 27, 2017 14:52:45

Soures21
Зарегистрирован: 2017-01-24
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Не находит Xpath

aiscy
большое спасибо, очень помогли. Могу отблагодарить и отправить на Qiwi?

Офлайн

#8 Янв. 27, 2017 17:09:26

aiscy
Зарегистрирован: 2015-06-17
Сообщения: 52
Репутация: +  9  -
Профиль   Отправить e-mail  

Не находит Xpath

Soures21
большое спасибо, очень помогли. Могу отблагодарить и отправить на Qiwi?
Я не против, на email написал.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version