Гусеничный с Python? - PullRequest
       32

Гусеничный с Python?

2 голосов
/ 11 июля 2011

Я хотел бы написать сканер, использующий python. Это значит: у меня есть URL домашней страницы некоторых веб-сайтов, и я бы хотел, чтобы моя программа просматривала все веб-сайты по ссылкам, которые остаются на веб-сайте. Как я могу сделать это легко и быстро? Я уже пробовал BeautifulSoup, но он действительно потребляет процессор и довольно медленный на моем компьютере.

Ответы [ 4 ]

5 голосов
/ 11 июля 2011

Я бы рекомендовал использовать mechanize в сочетании с lxml.html. Как предположил Роберт Кинг, механизация, вероятно, лучше всего подходит для навигации по сайту. для извлечения элементов я бы использовал lxml. lxml намного быстрее, чем BeautifulSoup и, вероятно, самый быстрый парсер, доступный для python. эта ссылка показывает тест производительности различных парсеров html для python. Лично я бы воздержался от использования скрап-упаковки.

Я не проверял это, но это, вероятно, то, что вы ищете, первая часть взята прямо из документации механизации . документация lxml также весьма полезна. особенно взгляните на этот и этот раздел.

import mechanize
import lxml.html

br = mechanize.Browser()
response = br.open("somewebsite")

for link in br.links():
    print link
    br.follow_link(link)  # takes EITHER Link instance OR keyword args
    print br
    br.back()

# you can also display the links with lxml
html = response.read()
root = lxml.html.fromstring(html)
for link in root.iterlinks():
    print link

вы также можете получить элементы через root.xpath (). Простой wget может быть даже самым простым решением.

Надеюсь, я смогу помочь.

3 голосов
/ 11 июля 2011

Вот пример очень быстрого (одновременного) рекурсивного веб-скребка с использованием eventlet .Он печатает только те URL-адреса, которые он находит, но вы можете изменить его, чтобы сделать то, что вы хотите.Возможно, вы захотите проанализировать html с помощью lxml (быстро), pyquery (медленнее, но все еще быстро) или BeautifulSoup (медленно), чтобы получить нужные данные.

3 голосов
/ 11 июля 2011

Мне нравится использовать механизировать. Это довольно просто, вы загружаете его и создаете объект браузера. С помощью этого объекта вы можете открыть URL. Вы можете использовать функции «назад» и «вперед», как в обычном браузере. Вы можете перебирать формы на странице и заполнять их при необходимости. Вы также можете перебирать все ссылки на странице. Каждый объект ссылки имеет URL-адрес и т. Д., По которому можно щелкнуть.

вот пример: Загрузка всех ссылок (связанных документов) на веб-странице с использованием Python

2 голосов
/ 11 июля 2011

Посмотрите на scrapy связанные вопросы ). Что касается производительности ... очень сложно делать какие-либо полезные предложения, не видя код.

...