Уведомления

Группа в Telegram: @pythonsu

#1 Май 8, 2017 16:04:03

Igorh1997
Зарегистрирован: 2017-05-07
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Парсинг с помощью паскаля

Здравствуйте. Я экстра новичёк. Мне нужно с помощью питона ( выбрал питон что бы в следствии дополнить функционал и переместить в бота телеграмм) взять данные из таблицы ( в каждой строке есть 4 ключевых так сказать ячейки но с анализом я думаю что разберусь) и после анализа потом забить в так сказать форму на другом сайте. С забитием в форму я ещё не разбирался но сегодня убил пол дня на попытки Парсинга. Хотел бы поинтересоваться у вас через какие инструменты реализовать парсинг? В приведённом ниже коде я смог выхватить всю таблицу но когда попытался каким либо образом отсортировать их на нужные и не нужные меня ждал провал. Я посмотрел в в коде страницы к какому классу принадлежат нужные мне данные но при попытке сортировки я получал или только первую строку ( скорее единственную а не обязательно первую) или вообще нечего не получал.

Наверно много воды налил.
То на что я рассчитываю: вы подскажите как это легче сделать ( легче для моего понимания костылёвость кода меня не волнует на данном этапе)

в приложен файле код который может брать в всю таблицу на странице ( попытку брать отдельные строки я закомментировал)

Прикреплённый файлы:
attachment hi.py (593 байта)

Офлайн

#2 Май 8, 2017 17:34:37

Romissevd
От: Счастье
Зарегистрирован: 2015-03-01
Сообщения: 533
Репутация: +  76  -
Профиль   Отправить e-mail  

Парсинг с помощью паскаля

Как-то так

 import urllib.request
from bs4 import BeautifulSoup
def get_html(url):
    response = urllib.request.urlopen(url)
    return response.read()
def parse(html):
    soup = BeautifulSoup(html, "html.parser")
    projects=[]
    table = soup.find_all('tr',class_='belowHeader')
    n = 1
    for row in table:
        print('№%i' % (n))
        print('League - ', row.find('td', {'class': 'tdleaguemw'}).text)
        print('Date - ', row.find('td', {'class': 'tddate1mw'}).text)
        team = row.find_all('td', {'class': 'tdteamname2'})
        print('Home - ', team[0].text)
        print('Away - ', team[1].text)
        n += 1
    #print (table)
def main():
    parse(get_html('http://www.arbworld.net/en/moneyway/mw-1-x-2'))
if __name__ == '__main__':
    main()

Офлайн

#3 Май 9, 2017 01:27:12

Igorh1997
Зарегистрирован: 2017-05-07
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Парсинг с помощью паскаля

Спасибо за помощь.

У меня возникла ещё одна проблема.

Я сделал что бы данные начинали выводиться при условии что коэффициент будет больше 2,5 это было легко ( хотя после этого он почему то выводится в но думаю что это не критично и легко исправимо) но вот когда я хочу сделать ещё одно условие у меня появились трудности

Данные выводятся вот в таком формате “56.5 %€ 1 262” мне надо сортировать по % и по €
а значит мне надо
1) разделить эту “строку” на две float ,переменные которые я буду прогонять через условие, и также убрать знаки %€ и пробел между числом

Подскажите как это сделать

Прикреплённый файлы:
attachment hi.py (1,0 KБ)

Офлайн

#4 Май 9, 2017 08:24:35

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Парсинг с помощью паскаля

Свои попытки выкладывайте лучше текстом обернутым тегом code. И только то в чем проблема. Не всем охота скачивать и просматривать весь ваш код.

У вас данные не размечены в html Тут преобразования делают обычно регулярными выражениями

 import re
a=" 56.5 %€ 1 262"
b=re.sub(" +", "", a)
c=re.split("%€",b)



Офлайн

#5 Май 9, 2017 21:54:06

Igorh1997
Зарегистрирован: 2017-05-07
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Парсинг с помощью паскаля

спасибо учту
не подскажите как от избавиться?

Офлайн

#6 Май 9, 2017 21:57:03

Igorh1997
Зарегистрирован: 2017-05-07
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Парсинг с помощью паскаля

тупанул это же просто обозначение массива

Офлайн

#7 Май 10, 2017 22:29:20

Igorh1997
Зарегистрирован: 2017-05-07
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Парсинг с помощью паскаля

Здравствуйте
И снова обращаюсь к вам.
Как мне сделать что бы в создаваемом мною файле были только актуальные данные? Мне надо что бы в этом файле были только данные для будущих матчей.

Я думаю что надо как то искать в каждой строке текстового файла данные по времени и если они устаревшие ( сравнивать буду с системным временем) то удалять Всю строку.

И вообще как вы подскажите организовать эти данные для их дальнейшего использования? Я собираюсь потом брать из этого файла данные и опять таки с помощью кода искать на сайте подходящие матчи.
не уверен что правильно код к сообщению прикрепил поэтому ещё исходник приложу

 #буду комментировать каждый чих что бы случайно что то важное не забыть указать
import urllib.request
import re
from bs4 import BeautifulSoup
def get_html(url):
    response = urllib.request.urlopen(url)
    return response.read()
def parse(html):
    soup = BeautifulSoup(html, "html.parser")
    projects=[]
    table = soup.find_all('tr',class_='belowHeader')
    n = 1
    #ввёл эту переменную что бы было куда прибавлять данные
    p = ""
    for row in table:
        #закомментировал принты так как могут понадобиться
        #print('№%i' % (n))
        #приложил к себе тот кусок кода который вы мне дали
        a = row.find('td', {'class': 'tdpercentmw2'}).text
        b = re.sub(" +", "", a)
        c = re.split("%€", b)
        c= [float(elem) for elem in c]
        koof = row.find('td', {'class': 'tdpercentmw1'})
        koof = [float(elem) for elem in koof]
        if koof[0] > 2.5 and c[0]>65 and c[-1]>1000:
            #присваиваю переменным отдельные части нужных мне данные что бы потом сложить в один
            q=row.find('td', {'class': 'tddate1mw'}).text
            #print('время игры - ', row.find('td', {'class': 'tddate1mw'}).text)
            w=row.find('td', {'class': 'tdteamname2'}).text
            #print('название команды - ', row.find('td', {'class': 'tdteamname2'}).text)
            #избавляюсь от лишних знаков
            a = row.find('td', {'class': 'tdpercentmw2'}).text
            b = re.sub(" +", "", a)
            c = re.split("%€", b)
            #print('процент от общей суммы и сумма денег - ', row.find('td', {'class': 'tdpercentmw2'}).text)
            r=row.find('td', {'class': 'tdpercentmw1'}).text
            #print('коэффициент 1 команды - ', row.find('td', {'class': 'tdpercentmw1'}).text )
            #в "T" плюсую все свои данные
            t="время"+"   "+q+"   "+"название команды"+"   "+w+"   "+"процент от общей суммы"+"   "+c[0]+"     "+"сумма денег"+"   "+c[1]+"    "+"коэффициент 1 команды"+"    "+r
            #  в "p" собираю все "t" что бы потом одной переменной перенести в файл
            p=p+t + '\n'
        n += 1
    #просто решил сделать небольшой элемент управления
    if p!="":
        print("напиши 'да' если хочешь вывести ответ в файл или напиши нет что бы прочто увидеть его ")
        b=input()
        if b=='да':
            """создаю новый файл и заношу туда "p" но мне кажется что если я захочу что бы 
            этот файл был в актуальном состоянии то мне приведётся это перенести наверх там где я данные ищу на сайте
            или надо будет здесь как то сделать анализ и убирание лишних строк"""
            my_file = open('stavka.txt', 'w')
            my_file.write(p)
            my_file.close()
        else:
            print(p)
    else:
     print("подходящих матчей  не обнаружено ")
#извиняюсь за кривой код и излишнии комментарии
def main():
    parse(get_html('http://www.arbworld.net/en/moneyway/mw-1-x-2'))
if __name__ == '__main__':
    main()

Прикреплённый файлы:
attachment parsing.py (3,8 KБ)

Офлайн

#8 Май 10, 2017 22:58:49

Igorh1997
Зарегистрирован: 2017-05-07
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Парсинг с помощью паскаля

Только сейчас заметил как тупо назвал тему….
наверно текстовый файл это лишнее
как сделать что бы данные которые я отсортировал обновлялись в зависимости от времени?

Офлайн

#9 Май 11, 2017 07:34:10

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Парсинг с помощью паскаля

Igorh1997
И вообще как вы подскажите организовать эти данные для их дальнейшего использования?
Так напишите как будете использовать. А так разговор беспредметен. Вам похоже надо общий скелет программы продумать. Сразу отмечу, в питоне нет объекта “строка текстового файла”, вам надо думать в других терминах.

Сохранять восстанавливать данные поможет модуль pickle



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version