Вопрос

Так что у меня есть следующий набор вкусной информации. Он печатает данные со страницы вкуса в следующем формате

Закладка | Число людей

Закладка | Количество людей и т. Д.

Я использовал следующий метод, чтобы найти эту информацию.

def extract (soup):
    links = soup.findAll('a',rel='nofollow')
    for link in links:
        print >> outfile, link['href']

    hits = soup.findAll('span', attrs={'class': 'delNavCount'})
    for hit in hits:
        print >> outfile, hit.contents


#File to export data to
outfile = open("output.txt", "w")

#Browser Agent
br = Browser()    
br.set_handle_robots(False)
br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')]


url= "http://www.delicious.com/asd"
page = br.open(url)
html = page.read()
soup = BeautifulSoup(html)
extract(soup)

Но проблема заключалась в том, что в некоторых закладках не было много людей, поэтому я решил проанализировать их по -другому, чтобы получить данные одновременно и распечатать закладки и количество людей рядом.

РЕДАКТИРОВАТЬ: Получил его от 15 до 5 секунд с этой обновленной версией, любые предложения

def extract (soup):
    bookmarkset = soup.findAll('div', 'data')
    for bookmark in bookmarkset:
        link = bookmark.find('a',)
        vote = bookmark.find('span', 'delNavCount')
        try:
            print >> outfile, link['href'], " | " ,vote.contents
        except:
            print >> outfile, "[u'0']"
    #print bookmarkset


#File to export data to
outfile = open("output.txt", "w")

#Browser Agent
br = Browser()    
br.set_handle_robots(False)
br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')]


url= "http://www.delicious.com/asd"
page = br.open(url)
html = page.read()
soup = BeautifulSoup(html)
extract(soup)

Производительность по этому поводу ужасна, хотя для анализа первой страницы занимает 17 секунд, а затем около 15 секунд на довольно приличной машине. Это значительно ухудшилось, когда переход от первого бита кода к второму биту. Есть ли что -нибудь, что я могу сделать, чтобы привести здесь перфу?

Это было полезно?

Решение

Я не понимаю, почему вы назначаете vote - дважды. Первое задание не нужно и действительно довольно тяжелое, поскольку оно должно проанализировать весь документ - на каждую итерацию. Почему?

   vote = BeautifulSoup(html)
   vote = bookmark.findAll('span', attrs={'class': 'delNavCount'})

Другие советы

Если вы обеспокоены производительностью, вы можете взглянуть на то, что общается с восхитительным API, а не на экране, т.е. пиджелистный. Анкет Например:

>>> import pydelicious
>>> pydelicious.get_userposts('asd')
[{'extended': '', 'description': u'Ksplice - System administration and software blog', 'tags': u'sysadm, blog, interesting', 'url': u'http://blog.ksplice.com/', 'user': u'asd'

BeautifulSoup делает намного больше, чем вам нужно в этом случае. Если вы действительно хотите запустить скорость, то я бы посоветовал принять более базовый подход Urllib + простой анализатор линии.

Расположение страницы размером с пример «ASD» должен занять за одну секунду на современной машине.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top