Форум сайта python.su
доброго времени суток.
хочу написать телеграм бот, который будет показывать данные с одного тематического сайта.
то есть основная задача - парсить этот сайт, чтобы получить нужные данные.
на сайте есть форма входа, то есть надо зарегистрироваться.
нашел статейку на хабре по парсингу - https://habrahabr.ru/post/280238/#comment_8824194
с ее помощью я уже научился на python3 + либа requests, передавать auth данные и скачивать страницу по нужному URL.
НО, похоже из-за того, что на сайте используется JS, та часть страницы, которая содержит нужные мне данные, судя по всему просто не скачивается в файл в виде html с помощью такого кода:
def load_user_data(): ........ r2 = session.get(DATAURL) return r2.text data = load_user_data() with open('data.html', 'w', encoding='UTF-8') as output_file: output_file.write(data)
<ul id="meteo" class="ui-sortable"> <li id="record_1" class="li "></li> ----------- место1 <li id="record_2" class="li "></li> ------------ место2 </ul>
<li id="record_1" class="li "> <li> <div class="station" style="display:block"> <div class="float_left"> <div class="gadget_text"> <img src="http://site.com/images/gadget/digits/4.gif" align="2"> </div> </div> </li> </li>
Офлайн
d00mты же сам ответил выше:
почему эти данные не выгружаются в html файл с помощью модуля request - метод get() ?
d00m
похоже из-за того, что на сайте используется JS, та часть страницы, которая содержит нужные мне данные, судя по всему просто не скачивается в файл в виде html
Отредактировано Vintets (Авг. 2, 2017 13:31:40)
Офлайн
ok
допустим я получил нужные мне данные в скачанную страницу.
как мне их получить в код скрипта в виде переменной?
например в data.html моем есть вот такое:
<li id="record_1" class="li "> <li> <div class="station" style="display:block"> <div class="float_left"> <div class="gadget_text"> <img src="http://site.com/images/gadget/digits/4.gif" align="2"> <img src="http://site.com/images/gadget/digits/dot.gif" align="2"> <img src="http://site.com/images/gadget/digits/5.gif" align="2"> </div> </div> </li> </li>
Офлайн
d00mПосмотри пакет Beautiful Soup он как раз умеет то что тебе надо
как мне в скрипте произвести поиск ВСЕГО что есть в DIV блоке gadget_text и сохранить в какието переменные?
Офлайн
да, я читаю уже про этот BeautifulSoup.
правда пока не понятно все таки, как найти эти img именно в этом месте..
а потом же еще надо будет порядок соблюсти и получить цифру..
Офлайн
Если я не забыл CSS то как то так:
a = soup.select("div .gadget_text > img")
Офлайн
сделал вот так:
def parse(html): soup = BeautifulSoup(html) wind = soup.find('div', class_='gadget_text') # выбираю нужный мне DIV с моими данными for img in wind.find_all('img'): print(img.get('src')) # печать всех URL на GIF
Офлайн
Можно и без регулярок
import os from bs4 import BeautifulSoup def parse(html): soup = BeautifulSoup(html, 'html.parser') wind = soup.find('div', class_='gadget_text') data = [] for img in wind.find_all('img'): url = img.get('src') d = os.path.split(url)[1][:-4] d = d.replace('dot', '.') data.append(d) result = ''.join(data) print (result) return result parse(html)
Офлайн