Python 中哪个最好:urllib2、PycURL 还是 mechanize?

2024-01-02

好的,我需要使用 Python 下载一些网页,并对我的选项进行了快速调查。

Python 中包含:

urllib http://docs.python.org/library/urllib.html- 在我看来我应该使用 urllib2 代替。 urllib 不支持 cookie,仅支持 HTTP/FTP/本地文件(无 SSL)

urllib2 http://docs.python.org/library/urllib2.html- 完整的 HTTP/FTP 客户端,支持大多数需要的东西,如 cookie,不支持所有 HTTP 动词(仅 GET 和 POST,不支持 TRACE 等)

功能齐全:

机械化 http://wwwsearch.sourceforge.net/mechanize/- 可以使用/保存 Firefox/IE cookie,采取类似第二个链接的操作,积极维护(2011 年 3 月发布 0.2.5)

PycURL http://pycurl.sourceforge.net/- 支持curl所做的一切(FTP、FTPS、HTTP、HTTPS、GOPHER、TELNET、DICT、FILE和LDAP),坏消息:自2008年9月9日(7.19.0)以来未更新

新的可能性:

urllib3 http://code.google.com/p/urllib3/- 支持连接重用/池和文件发布

已弃用(也称为使用 urllib/urllib2 代替):

httplib http://docs.python.org/library/httplib.html- 仅 HTTP/HTTPS(无 FTP)

httplib2 http://code.google.com/p/httplib2/- 仅 HTTP/HTTPS(无 FTP)

首先让我印象深刻的是 urllib/urllib2/PycURL/mechanize 都是相当成熟且运行良好的解决方案。 mechanize 和 PycURL 随许多 Linux 发行版(例如 Fedora 13)和 BSD 一起提供,因此安装通常不是问题(所以这很好)。

urllib2 看起来不错,但我想知道为什么 PycURL 和 mechanize 看起来都很受欢迎,我是否缺少一些东西(即,如果我使用 urllib2,我会在某个时候把自己逼到角落吗?)。我真的很想得到一些关于这些东西的优点/缺点的反馈,这样我就可以为自己做出最好的选择。

编辑:添加了关于 urllib2 中动词支持的注释


我认为这个演讲(在 pycon 2009)可以满足您所寻找的答案(Asheesh Laroia 在这方面拥有丰富的经验)。他指出了您大部分列表中的优点和缺点

  • 抓取网络:策略 不支持的编程网站 期待它(第 1 部分,共 3 部分) http://pyvideo.org/video/166/pycon-2009--scrape-the-web--strategies-for-progr0
  • 抓取网络:策略 不支持的编程网站 期待它(第 2 部分,共 3 部分) http://pyvideo.org/video/165/pycon-2009--scrape-the-web--strategies-for-progra
  • 抓取网络:策略 不支持的编程网站 期待它(第 3 部分,共 3 部分) http://pyvideo.org/video/167/pycon-2009--scrape-the-web--strategies-for-progr1

从 PYCON 2009 日程表来看:

你是否发现自己面临着 拥有您需要的数据的网站 提炼? 如果你的生活会更简单吗 您可以通过编程方式输入数据 进入网络应用程序,甚至那些 调整为抵抗机器人交互?

我们将讨论网络基础知识 刮擦,然后潜入 不同方法的详细信息以及在哪里 它们是最适用的。

你会离开 了解何时申请 不同的工具,并了解 屏幕抓取的“重锤” 我在一个项目中捡到的 电子前沿基金会。

如果可能的话,与会者应携带笔记本电脑来尝试我们讨论的示例,并可选择做笔记。

Update:Asheesh Laroia 更新了他的 pycon 2010 演示文稿

  • PyCon 2010:抓取网络: 网站编程策略 没想到 http://pyvideo.org/video/256/pycon-2010--scrape-the-web--strategies-for-progra

    * 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 - 网页抓取:可靠且高效地从不需要的页面中提取数据 https://www.youtube.com/watch?v=52wxGESwQSA

令人兴奋的信息被隐藏在网页和 HTML 表单后面。在本教程中,>您将学习如何解析这些页面以及何时应用使抓取更快、更稳定的高级技术。我们将介绍使用 Twisted、gevent 等进行并行下载;分析 SSL 背后的网站;使用 Selenium 驱动 JavaScript-y 网站; > 规避常见的反抓取技术。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python 中哪个最好:urllib2、PycURL 还是 mechanize? 的相关文章

  • 尽管极其懒惰,但如何在 Python 中模拟 IMAP 服务器?

    我很好奇是否有一种简单的方法来模拟 IMAP 服务器 例如imaplib模块 在Python中 without做很多工作 是否有预先存在的解决方案 理想情况下 我可以连接到现有的 IMAP 服务器 进行转储 并让模拟服务器在真实的邮箱 电子
  • 下载 PyQt6 的 Qt Designer 并使用 pyuic6 将 .ui 文件转换为 .py 文件

    如何下载 PyQt6 的 QtDesigner 如果没有适用于 PyQt6 的 QtDesigner 我也可以使用 PyQt5 的 QtDesigner 但是如何将此 ui 文件转换为使用 PyQt6 库而不是 PyQt5 的 py 文件
  • 使用 openCV 对图像中的子图像进行通用检测

    免责声明 我是计算机视觉菜鸟 我看过很多关于如何在较大图像中查找特定子图像的堆栈溢出帖子 我的用例有点不同 因为我不希望它是具体的 而且我不确定如何做到这一点 如果可能的话 但我感觉应该如此 我有大量图像数据集 有时 其中一些图像是数据集的
  • 如何使用固定的 pandas 数据框进行动态 matplotlib 绘图?

    我有一个名为的数据框benchmark returns and strategy returns 两者具有相同的时间跨度 我想找到一种方法以漂亮的动画风格绘制数据点 以便它显示逐渐加载的所有点 我知道有一个matplotlib animat
  • 如何在android上的python kivy中关闭应用程序后使服务继续工作

    我希望我的服务在关闭应用程序后继续工作 但我做不到 我听说我应该使用startForeground 但如何在Python中做到这一点呢 应用程序代码 from kivy app import App from kivy uix floatl
  • 更改自动插入 tkinter 小部件的文本颜色

    我有一个文本框小部件 其中插入了三条消息 一条是开始消息 一条是结束消息 一条是在 单位 被摧毁时发出警报的消息 我希望开始和结束消息是黑色的 但被毁坏的消息 参见我在代码中评论的位置 插入小部件时颜色为红色 我不太确定如何去做这件事 我看
  • Python 多处理示例不起作用

    我正在尝试学习如何使用multiprocessing但我无法让它发挥作用 这是代码文档 http docs python org 2 library multiprocessing html from multiprocessing imp
  • 打破嵌套循环[重复]

    这个问题在这里已经有答案了 有没有比抛出异常更简单的方法来打破嵌套循环 在Perl https en wikipedia org wiki Perl 您可以为每个循环指定标签 并且至少继续一个外循环 for x in range 10 fo
  • __del__ 真的是析构函数吗?

    我主要用 C 做事情 其中 析构函数方法实际上是为了销毁所获取的资源 最近我开始使用python 这真的很有趣而且很棒 我开始了解到它有像java一样的GC 因此 没有过分强调对象所有权 构造和销毁 据我所知 init 方法对我来说在 py
  • 如何使用装饰器禁用某些功能的中间件?

    我想模仿的行为csrf exempt see here https docs djangoproject com en 1 11 ref csrf django views decorators csrf csrf exempt and h
  • IRichBolt 在storm-1.0.0 和 pyleus-0.3.0 上运行拓扑时出错

    我正在运行风暴拓扑 pyleus verbose local xyz topology jar using storm 1 0 0 pyleus 0 3 0 centos 6 6并得到错误 线程 main java lang NoClass
  • 表达式中的 Python 'in' 关键字与 for 循环中的比较 [重复]

    这个问题在这里已经有答案了 我明白什么是in运算符在此代码中执行的操作 some list 1 2 3 4 5 print 2 in some list 我也明白i将采用此代码中列表的每个值 for i in 1 2 3 4 5 print
  • Numpy 优化

    我有一个根据条件分配值的函数 我的数据集大小通常在 30 50k 范围内 我不确定这是否是使用 numpy 的正确方法 但是当数字超过 5k 时 它会变得非常慢 有没有更好的方法让它更快 import numpy as np N 5000
  • 从 pygame 获取 numpy 数组

    我想通过 python 访问我的网络摄像头 不幸的是 由于网络摄像头的原因 openCV 无法工作 Pygame camera 使用以下代码就像魅力一样 from pygame import camera display camera in
  • 如何将 PIL 图像转换为 NumPy 数组?

    如何转换 PILImage来回转换为 NumPy 数组 这样我就可以比 PIL 进行更快的像素级转换PixelAccess允许 我可以通过以下方式将其转换为 NumPy 数组 pic Image open foo jpg pix numpy
  • 为美国东部以外地区的 Cloudwatch 警报发送短信?

    AWS 似乎没有为美国东部以外的 SNS 主题订阅者提供 SMS 作为协议 我想连接我的 CloudWatch 警报并在发生故障时接收短信 但无法将其发送到 SMS YES 经过一番挖掘后 我能够让它发挥作用 它比仅仅选择一个主题或输入闹钟
  • 在 Pandas DataFrame Python 中添加新列[重复]

    这个问题在这里已经有答案了 例如 我在 Pandas 中有数据框 Col1 Col2 A 1 B 2 C 3 现在 如果我想再添加一个名为 Col3 的列 并且该值基于 Col2 式中 如果Col2 gt 1 则Col3为0 否则为1 所以
  • 从 Python 中的类元信息对 __init__ 函数进行类型提示

    我想做的是复制什么SQLAlchemy确实 以其DeclarativeMeta班级 有了这段代码 from sqlalchemy import Column Integer String from sqlalchemy ext declar
  • 循环标记时出现“ValueError:无法识别的标记样式 -d”

    我正在尝试编码pyplot允许不同标记样式的绘图 这些图是循环生成的 标记是从列表中选取的 为了演示目的 我还提供了一个颜色列表 版本是Python 2 7 9 IPython 3 0 0 matplotlib 1 4 3 这是一个简单的代
  • Spark.read 在 Databricks 中给出 KrbException

    我正在尝试从 databricks 笔记本连接到 SQL 数据库 以下是我的代码 jdbcDF spark read format com microsoft sqlserver jdbc spark option url jdbc sql

随机推荐