Web-соскоб.Как сделать это быстрее? - PullRequest
0 голосов
/ 10 октября 2018

Мне нужно извлечь некоторые атрибуты (в моем примере только один: текстовое описание приложений) из веб-страниц.Проблема в времени!Действительно, использование следующего кода для перехода на страницу, извлечения одной части HTML и ее сохранения занимает около 1,2-1,8 секунды на страницу.Много времени.Есть ли способ сделать это быстрее?У меня много страниц, х может быть и 200000. Я использую Юпитер.

    Description=[]
    for x in range(len(M)):
        response = http.request('GET',M[x] )
        soup = BeautifulSoup(response.data,"lxml")
        t=str(soup.find("div",attrs={"class":"section__description"}))
        Description.append(t)

Спасибо

Ответы [ 2 ]

0 голосов
/ 10 октября 2018

Я бы попробовал разделить это на несколько процессов в моем комментарии.Таким образом, вы можете поместить свой код в функцию и использовать многопроцессорность, подобную этой:

from multiprocessing import Pool

def web_scrape(url):
    response = http.request('GET',url )
    soup = BeautifulSoup(response.data,"lxml")
    t=str(soup.find("div",attrs={"class":"section__description"}))
    return t

if __name__ == '__main__':
    # M is your list of urls
    M=["https:// ... , ... , ... ]
    p = Pool(5) # 5 or how many processes you think is appropriate (start with how many cores you have, maybe)
    description=p.map(web_scrape, M))
    p.close()
    p.join()
    description=list(description) # if you need it to be a list

В результате ваш список URL-адресов распределяется по нескольким процессам, выполняющим вашу функцию очистки.Все результаты в итоге объединяются и в итоге description.Это должно быть намного быстрее, чем если бы вы обрабатывали каждый URL-адрес по одному, как вы делаете в настоящее время.

Для более подробной информации: https://docs.python.org/2/library/multiprocessing.html

0 голосов
/ 10 октября 2018

Вам следует подумать немного осмотреть страницу .Если страница опирается на Rest API, вы можете очистить содержимое, которое вам нужно, напрямую получая его из API.Это гораздо более эффективный способ, чем получение содержимого из HTML.Чтобы использовать его, вы должны проверить Библиотека запросов для Python .

...