Хорошо, таким образом, я должен загрузить некоторые веб-страницы с помощью 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
urllib2
есть в каждой установке Python, поэтому это хорошая база для начала. PycURL
полезен для тех, кто уже привык использовать libcurl, раскрывает больше низкоуровневых деталей HTTP, плюс получает все исправления и улучшения, примененные в libcurl. mechanize
используется для настойчивого управления соединением, как это делает браузер. Это не вопрос того, что один лучше другого, это вопрос выбора подходящего инструмента для работы.
Не беспокойтесь о "последнем обновлении". HTTP не сильно изменился за последние несколько лет ;)
Лучше всего использовать urllib2 (так как он встроен), затем переключитесь на mechanize, если вам нужны cookies из Firefox. mechanize можно использовать как замену urllib2 - у них похожие методы и т.д. Использование cookies в Firefox означает, что вы можете получать информацию с сайтов (например, StackOverflow), используя свои личные учетные данные. Только будьте ответственны за количество запросов (иначе вас заблокируют).
PycURL - для тех, кому нужны все низкоуровневые вещи в libcurl. Я бы сначала попробовал другие библиотеки.
Urllib2 поддерживает только HTTP GET и POST, могут быть обходные пути, но если ваше приложение зависит от других HTTP-команд, вы, вероятно, предпочтете другой модуль.
Я думаю, что в этом выступлении (на 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:
Интересная информация хранится на веб-страницах и за HTML-формами. rial,> вы узнаете, как анализировать эти страницы и когда применять передовые методы, которые делают парсинг более быстрым и стабильным. Мы рассмотрим параллельную загрузку с помощью Twisted, gevent,> и других; анализ сайтов за SSL; управление JavaScript-сайтами с помощью Selenium; и> уклонение от общепринятых методов защиты от соскабливания.
Каждая библиотека Python, поддерживающая HTTP, имеет свои преимущества.
Используйте тот, который имеет минимальное количество функций, необходимых для конкретной задачи.
В вашем списке отсутствует как минимум urllib3 - классная сторонняя HTTP-библиотека, которая может повторно использовать HTTP-соединение, что значительно ускоряет процесс получения нескольких URL-адресов с одного и того же сайта.