Который является лучшим в Python: urllib2, PycURL или механизируют?

Хорошо, таким образом, я должен загрузить некоторые веб-страницы с помощью Python и сделал быстрое расследование моих опций.

Включенный с Python:

urllib - кажется мне, что я должен использовать urllib2 вместо этого. urllib не имеет никакой поддержки cookie, файлы HTTP/FTP/локального только (никакой SSL)

urllib2 - завершите клиент HTTP/FTP, самые необходимые вещи поддержек как cookie, не поддерживает все глаголы HTTP (только ДОБИРАЮТСЯ и POST, никакая ТРАССИРОВКА, и т.д.),

Полнофункциональный:

механизируйте - может использовать/сохранять cookie Firefox/IE, принять меры, любят, переходят по второй ссылке, активно сохраняемой (0.2.5 выпущенных в марте 2011)

PycURL - поддерживает все, что завихрение делает (FTP, FTPS, HTTP, HTTPS, Gopher, TELNET, DICT, ФАЙЛ и LDAP), плохие новости: не обновленный с 9 сентября 2008 (7.19.0)

Новые возможности:

urllib3 - соединение поддержек re-using/pooling и регистрация файла

Удержанный от использования (иначе используют urllib/urllib2 вместо этого):

httplib - HTTP/HTTPS только (никакой FTP)

httplib2 - HTTP/HTTPS только (никакой FTP)

Первая вещь, которая ударяет меня, состоит в том, что urllib/urllib2/PycURL/mechanize являются всеми довольно сформировавшимися решениями та работа хорошо. механизируйте и поставка PycURL со многими дистрибутивами Linux (например, Fedora 13) и BSDs, таким образом, установка не обычно, выходят (таким образом, это хорошо).

urllib2 выглядит хорошим, но я задаюсь вопросом, почему PycURL и механизируют, оба кажутся очень популярными, есть ли что-то, что я пропускаю (т.е. если я буду использовать urllib2, то я нарисую меня в к углу в какой-то момент?). Я действительно хотел бы некоторую обратную связь на профессионалах/недостатках этих вещей, таким образом, я могу сделать лучший выбор для меня.

Править: добавленное примечание по глаголу поддерживает в urllib2

72
задан Tim Lesher 15 June 2011 в 15:54
поделиться

5 ответов

  • urllib2 есть в каждой установке Python, поэтому это хорошая база для начала.
  • PycURL полезен для тех, кто уже привык использовать libcurl, раскрывает больше низкоуровневых деталей HTTP, плюс получает все исправления и улучшения, примененные в libcurl.
  • mechanize используется для настойчивого управления соединением, как это делает браузер.

Это не вопрос того, что один лучше другого, это вопрос выбора подходящего инструмента для работы.

35
ответ дан 24 November 2019 в 12:41
поделиться

Не беспокойтесь о "последнем обновлении". HTTP не сильно изменился за последние несколько лет ;)

Лучше всего использовать urllib2 (так как он встроен), затем переключитесь на mechanize, если вам нужны cookies из Firefox. mechanize можно использовать как замену urllib2 - у них похожие методы и т.д. Использование cookies в Firefox означает, что вы можете получать информацию с сайтов (например, StackOverflow), используя свои личные учетные данные. Только будьте ответственны за количество запросов (иначе вас заблокируют).

PycURL - для тех, кому нужны все низкоуровневые вещи в libcurl. Я бы сначала попробовал другие библиотеки.

2
ответ дан 24 November 2019 в 12:41
поделиться

Urllib2 поддерживает только HTTP GET и POST, могут быть обходные пути, но если ваше приложение зависит от других HTTP-команд, вы, вероятно, предпочтете другой модуль.

2
ответ дан 24 November 2019 в 12:41
поделиться

Я думаю, что в этом выступлении (на pycon 2009) есть ответы на то, что вы ищете (Ашиш Ларойя имеет большой опыт в этом вопросе). И он указывает на положительные и отрицательные стороны большей части вашего листинга

Из расписания PYCON 2009:

Вы сталкиваетесь с веб-сайтами, на которых есть данные, которые необходимо извлечь? Была бы ваша жизнь проще, если бы вы могли программно вводить данные в веб-приложения, даже те , которые настроены на сопротивление взаимодействию со стороны ботов?

Мы будем обсудите основы парсинга веб-страниц, а затем подробно изучите различные методы и то, где они наиболее применимы.

Вы покинете , понимая, когда применять различные инструменты, и узнаете о "тяжелом молотке" для очистки экрана , который я взят из проекта для Electronic Frontier Foundation.

Участники должны принести ноутбук, если возможно, чтобы попробовать примеры, которые мы обсуждали, и, при желании, делать заметки.

Обновление: Ашиш Лароя обновил свою презентацию для pycon 2010

  • PyCon 2010: Очистите Интернет: Стратегии программирования веб-сайтов , которые не ожидал

     * Мой девиз: «Сайт - это API."
     * Выбор парсера: BeautifulSoup, lxml, HTMLParse и html5lib. 
     * Извлечение информации даже в условиях плохого HTML: регулярные выражения, BeautifulSoup, SAX и XPath. {{1 }} * Автоматические инструменты обратного проектирования шаблонов. 
     * Отправка в формы. 
     * Игра с XML-RPC 
     * НЕ СТАНОВИТЕСЬ ЗЛОГО СПАМЕРА КОММЕНТАРИЙ. 
     * Контрмеры и их обход: 
    o ограничения IP-адресов 
    o скрытые поля формы 
    o обнаружение пользовательского агента 
    o JavaScript 
    o CAPTCHA { {1}} * Множество полных исходных кодов рабочих примеров: 
    o Отправка в формы для преобразования текста в речь. 
    o Загрузка музыки из интернет-магазинов. 
    o Автоматизация Firefox с Selenium RC для навигации по сервису на чистом JavaScript. 
     * Вопросы и ответы; и workshopping 
     * Используйте свою силу во благо, а не во зло. 
     

Обновление 2:

PyCon US 2012 - Веб-парсинг: надежно и эффективно извлекает данные со страниц, которые этого не ожидают

Интересная информация хранится на веб-страницах и за HTML-формами. rial,> вы узнаете, как анализировать эти страницы и когда применять передовые методы, которые делают парсинг более быстрым и стабильным. Мы рассмотрим параллельную загрузку с помощью Twisted, gevent,> и других; анализ сайтов за SSL; управление JavaScript-сайтами с помощью Selenium; и> уклонение от общепринятых методов защиты от соскабливания.

45
ответ дан 24 November 2019 в 12:41
поделиться

Каждая библиотека Python, поддерживающая HTTP, имеет свои преимущества.

Используйте тот, который имеет минимальное количество функций, необходимых для конкретной задачи.

В вашем списке отсутствует как минимум urllib3 - классная сторонняя HTTP-библиотека, которая может повторно использовать HTTP-соединение, что значительно ускоряет процесс получения нескольких URL-адресов с одного и того же сайта.

1
ответ дан 24 November 2019 в 12:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: