Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 24, 2016 15:54:34

codegamer
Зарегистрирован: 2016-11-24
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Не отрабатывает парсер

Доброго времени суток!

Сразу скажу, что давно в питоне не очень я бум-бум. Скачал вот скриптик с Гита+пытался немного изменить, добавить отримабути региона и т.д. Он должен мне отпарсить LI и выдать URL-ы. Собственно ничего не парсит и я не понимаю почему. Файлы пустые создаются. Помоги добрый человек настроить этого демона

 '''
Parse LiveInternet directory: http://www.liveinternet.ru/rating/
It has limits for requests from one IP:
----------------
Too many requests from one IP.
Access denied for 60 minutes.
Limit: 1,000 requests per 10 minutes.
----------------    
So, add thread sleep:
time.sleep(60*10/1000)
'''
from bs4 import BeautifulSoup
import time
category_sites = []
categories = [
   # 'http://www.liveinternet.ru/rating/ru/#period=week;geo=ru;group=rest;'
    'http://www.liveinternet.ru/rating/rest/'
]
def main():
    for c in categories:
        process_category(c)
def process_category(category):
    print '---------------------'
    print 'Processing category: %s ' % category
    start_time = time.time()
    pages_processed, sites_parsed = do_process_category(category)
    elapsed_time = time.time() - start_time
    print 'Elapsed time, secs: %f' % elapsed_time
    print 'Pages processed: %d' % pages_processed
    print 'Sites parsed: %d' % sites_parsed
    print '---------------------'
def do_process_category(category):
    global category_sites
    category_sites = []
    category_name = extract_category_name(category)
    # from BeautifulSoup import BeautifulSoup
    import urllib2
    html = urllib2.urlopen(category).read()
    pages_qty = get_pages_qty(html)
    parse_sites(html)
    for page in range(2, pages_qty+1):
        u = category + ('page=%d;' % page)
        print '----> %s ' % u
        html = urllib2.urlopen(u).read()
        parse_sites(html)
        time.sleep(600/1000)
    sites_parsed = len(category_sites)
    write_sites(category_name)
    return pages_qty, sites_parsed
def parse_sites(html):
    global category_sites
    soup = BeautifulSoup(html, "html.parser")
    trs = soup.findAll('tr', {'class': 'high', 'align': 'top'})
    for tr in trs:
        try:
            aa = tr.findAll('a', {'target': '_blank', 'onclick': 'cl(this)'})
            a = aa[0]
            href = a['href']
            category_sites.append(href)
        except:
            pass
def write_sites(category_name):
    f = open(category_name+'.txt','wb')
    for s in category_sites:
        f.write(s.encode('utf-8'))
        f.write('\n')
    f.close()
def get_pages_qty(html):
    #token = '«previous '
    token = '«'
    i = html.find(token)
    if i == -1:
        print 'Token not found'
        return 1
    j = html.rfind('</a>', i-100, i)
    if j == -1:
        return 1
    k = j-1
    while html[k] != '>':
        k = k-1
    srr = html[k+1:j]
    return int(srr)
def extract_category_name(category):
    s = category
    if s.endswith('/'): s = s[0:len(s)-1]
    i = s.rfind('/')
    return s[i+1:]
if __name__ == "__main__":
    main()

Офлайн

#2 Ноя. 25, 2016 03:06:17

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9740
Репутация: +  843  -
Профиль   Отправить e-mail  

Не отрабатывает парсер

Этот скрипт устарел, так как сайт изменился. Раньше там выдавало просто html-код, сейчас там html-код генерится скриптом в самом браузере.



Отредактировано py.user.next (Ноя. 25, 2016 03:06:52)

Офлайн

#3 Ноя. 25, 2016 11:45:18

codegamer
Зарегистрирован: 2016-11-24
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Не отрабатывает парсер

py.user.next
Этот скрипт устарел, так как сайт изменился. Раньше там выдавало просто html-код, сейчас там html-код генерится скриптом в самом браузере.

спасибо за ответ, а что то можно сделать с этим делом парой строк?
Или может подскажет кто№: чем сейчас можно отпарсить LI ? желательно бесплатным

Офлайн

#4 Ноя. 26, 2016 01:10:11

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9740
Репутация: +  843  -
Профиль   Отправить e-mail  

Не отрабатывает парсер

Можешь попробовать там selenium применить. Страница генерится скриптом, нет там никаких li, они создаются каждый раз самим браузером по командам с сайта.



Отредактировано py.user.next (Ноя. 26, 2016 01:10:45)

Офлайн

#5 Ноя. 28, 2016 15:41:18

codegamer
Зарегистрирован: 2016-11-24
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Не отрабатывает парсер

Собственно с таким парсом успешно справляется Content Downloader X1 , правда програ платная но очень гибкая

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version