Что лучше всего в Python: urllib2, PycURL или механизировать?

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

Включено в Python:

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

urllib2 – полный HTTP / FTP-клиент, поддерживает наиболее необходимые вещи, такие как файлы cookie, не поддерживает все HTTP-глаголы (только GET и POST, без TRACE и т. д.).

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

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

PycURL – поддерживает все завитки (FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE и LDAP), плохая новость: не обновляется с 9 сентября 2008 г. (7.19.0)

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

urllib3 – поддерживает повторное использование / объединение каналов и публикацию файлов

Устаревший (вместо него вместо этого использует urllib / urllib2):

httplib – только HTTP / HTTPS (без FTP)

httplib2 – только HTTP / HTTPS (без FTP)

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

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

Изменить: добавлено примечание о поддержке глагола в urllib2

  • Отправка данных с использованием POST в Python для PHP
  • Дросселирование с помощью urllib2
  • Почему я получаю атрибут AttributeError при попытке распечатать
  • получение значения заголовка местоположения с использованием python urllib2
  • gevent / запросы зависают, делая много головных запросов
  • Отправка веб-формы с использованием python
  • Есть ли библиотека для urllib2 для python, которую мы можем скачать?
  • Вход в quora с использованием python
  • 8 Solutions collect form web for “Что лучше всего в Python: urllib2, PycURL или механизировать?”

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

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

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

    • Scrape the Web: стратегии для программирования веб-сайтов, которые этого не ожидают (часть 1 из 3)
    • Scrape the Web: стратегии для программирования веб-сайтов, которые этого не ожидают (часть 2 из 3)
    • Scrape the Web: стратегии для программирования веб-сайтов, которые этого не ожидают (часть 3 из 3)

    Из графика PYCON 2009:

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

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

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

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

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

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

       * My motto: "The website is the API." * Choosing a parser: BeautifulSoup, lxml, HTMLParse, and html5lib. * Extracting information, even in the face of bad HTML: Regular expressions, BeautifulSoup, SAX, and XPath. * Automatic template reverse-engineering tools. * Submitting to forms. * Playing with XML-RPC * DO NOT BECOME AN EVIL COMMENT SPAMMER. * Countermeasures, and circumventing them: o IP address limits o Hidden form fields o User-agent detection o JavaScript o CAPTCHAs * Plenty of full source code to working examples: o Submitting to forms for text-to-speech. o Downloading music from web stores. o Automating Firefox with Selenium RC to navigate a pure-JavaScript service. * Q&A; and workshopping * Use your power for good, not evil. 

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

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

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

    Запросы на Python также являются хорошим кандидатом на HTTP-материал. Он имеет более приятный api IMHO, пример http-запроса из своей официальной документации:

     >>> r = requests.get('https://api.github.com', auth=('user', 'pass')) >>> r.status_code 204 >>> r.headers['content-type'] 'application/json' >>> r.content ... 

    Чтобы «получить некоторые веб-страницы», используйте запросы !

    С http://docs.python-requests.org/en/latest/ :

    Стандартный модуль urllib2 для Python предоставляет большинство необходимых вам HTTP-функций, но API полностью нарушен. Он был построен в разное время – и в другой сети. Для выполнения самых простых задач требуется огромная работа (даже метод переопределения).

    Все должно быть не так. Не в Python.

     >>> r = requests.get('https://api.github.com/user', auth=('user', 'pass')) >>> r.status_code 200 >>> r.headers['content-type'] 'application/json; charset=utf8' >>> r.encoding 'utf-8' >>> r.text u'{"type":"User"...' >>> r.json() {u'private_gists': 419, u'total_private_repos': 77, ...} 

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

    urllib2 лучше (поскольку он встроен), затем переключитесь на механизацию, если вам нужны файлы cookie из Firefox. Механизм может использоваться в качестве замены для urllib2 – они имеют похожие методы и т. д. Использование файлов cookie Firefox означает, что вы можете получать вещи с сайтов (например, StackOverflow), используя ваши персональные учетные данные. Просто отвечайте на количество запросов (или вы будете заблокированы).

    PycURL предназначен для людей, которым нужен любой материал низкого уровня в libcurl. Сначала я попробую другие библиотеки.

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

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

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

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

    Взгляните на Grab (http://grablib.org). Это сетевая библиотека, которая предоставляет два основных интерфейса: 1) захват для создания сетевых запросов и анализа полученных данных; 2) паук для создания скребок для массового сайта

    Под капотом Grab использует pycurl и lxml, но можно использовать другие сетевые транспорты (например, библиотеку запросов). Запросы на транспорт пока еще недостаточно проверены.

    Interesting Posts

    Использование sphinx с Markdown вместо RST

    Как заставить сервер принимать соединения из нескольких портов?

    Выполните установку post-скрипта Python с помощью distutils / setuptools

    Переопределить класс Autobahn / Twisted WebsocketClientProtocol

    Связывание кнопки виджета ipython и значений слайдера

    Каков самый простой способ добавить гиперссылку на элемент canvas в ReportLab?

    Как взаимодействовать с ssh с помощью модуля подпроцесса

    Переименуйте один заголовок столбца в рамке данных pandas

    Скопируйте данные из буфера обмена в Linux, Mac и Windows с помощью одного скрипта Python

    Что такое безопасный способ «привязать» переменную среды в python?

    Добавляем к пустому фрейму данных в Pandas?

    отбрасывать первую и последнюю строку из каждой группы

    Что делает «mro ()»?

    RabbitMQ / Celery с Django зависает при задержке / готовность / etc – нет полезной информации о журнале

    Как извлечь определенные строки данных из огромного листа Excel с помощью Python?

    Python - лучший язык программирования в мире.