问题标签 [urllib2]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 如何在python中下载任何(!)具有正确字符集的网页?
问题
当使用 python 对网页进行屏幕抓取时,必须知道页面的字符编码。如果你得到错误的字符编码,那么你的输出就会被弄乱。
人们通常使用一些基本的技术来检测编码。它们要么使用标头中的字符集或元标记中定义的字符集,要么使用编码检测器(它不关心元标记或标头)。仅使用其中一种技术,有时您将无法获得与在浏览器中相同的结果。
浏览器这样做:
- 元标记始终优先(或 xml 定义)
- 当元标记中没有定义字符集时,使用标头中定义的编码
- 如果根本没有定义编码,那么就该进行编码检测了。
(嗯......至少我相信大多数浏览器都是这样做的。文档真的很稀缺。)
我正在寻找的是一个可以像浏览器一样决定页面字符集的库。我确信我不是第一个需要适当解决这个问题的人。
解决方案(我还没有尝试过......)
Beautiful Soup 按优先级顺序尝试以下编码,将您的文档转换为 Unicode:
- 您作为 fromEncoding 参数传递给汤构造函数的编码。
- 在文档本身中发现的编码:例如,在 XML 声明或(对于 HTML 文档)http-equiv META 标记中。如果 Beautiful Soup 在文档中发现这种编码,它会重新从头开始解析文档并尝试新的编码。唯一的例外是,如果您明确指定了编码,并且该编码确实有效:那么它将忽略它在文档中找到的任何编码。
- 通过查看文件的前几个字节来嗅探的编码。如果在此阶段检测到编码,它将是 UTF-* 编码、EBCDIC 或 ASCII 之一。
- chardet 库嗅探到的编码,如果您安装了它。
- UTF-8
- Windows-1252
python - urllib2:提交表单然后重定向
我的目标是想出一个可移植的 urllib2 解决方案,它会发布一个表单,然后将用户重定向到出现的内容。POSTing 部分很简单:
提供data
将请求类型设置为 POST。现在,我怀疑我应该关心的所有数据都来自response.info()
& response.geturl()
。我应该做一个self.redirect(response.geturl())
里面的get(self)
方法webapp.RequestHandler
。
但是我应该如何处理标题?还有什么我忽略的吗?代码片段受到高度赞赏。:)
TIA。
编辑:这是我想出的一个天真的解决方案。重定向但远程服务器显示错误,表明与先前发布的表单不匹配:
python - 在 Windows 上以 Python 2.5 下载时出现 urlopen 错误 10045,“地址已在使用中”
我正在编写将在 Linux、OS X 和 Windows 上运行的代码。它从服务器下载大约 55,000 个文件的列表,然后逐步浏览文件列表,检查文件是否存在于本地。(使用 SHA 哈希验证和其他一些好东西。)如果文件不存在本地或哈希不匹配,它会下载它们。
服务器端是基于 80 端口的 Ubuntu 上的普通 Apache 2。
客户端在 Mac 和 Linux 上完美运行,但在下载多个文件后在 Windows(XP 和 Vista)上给我这个错误:
此链接:http ://bytes.com/topic/python/answers/530949-client-side-tcp-socket-receiving-address-already-use-upon-connect指向 TCP 端口耗尽,但“netstat -n " 从未向我显示超过六个处于“TIME_WAIT”状态的连接,即使在它出错之前也是如此。
代码(它下载的 55,000 个文件中的每一个都调用一次)是这样的:
更新:我通过 greping 日志发现它恰好进入下载例程 3998 次。我已经运行了多次,每次都在 3998 处失败。鉴于链接文章指出可用端口为 5000-1025=3975(有些可能已过期并被重用),它开始看起来更像链接文章描述的真正问题。但是,我仍然不确定如何解决这个问题。进行注册表编辑不是一种选择。
python - 使用 urllib2 将大型二进制文件流式传输到文件
我使用以下代码将大文件从 Internet 流式传输到本地文件:
这可行,但下载速度很慢。有更快的方法吗?(文件很大,所以我不想将它们保存在内存中。)
python - 如何将“catch-all”异常子句应用于复杂的 python web-scraping 脚本?
我有 100 个 CSV 格式的网站列表。所有站点都具有相同的一般格式,包括一个有 7 列的大表。我编写了这个脚本来从每个网站的第 7 列中提取数据,然后将这些数据写入文件。然而,下面的脚本部分工作:打开输出文件(在运行脚本之后)显示正在跳过某些内容,因为它只显示 98 次写入(显然脚本还记录了许多异常)。非常感谢有关如何在这种情况下实现“捕获异常”的指导。谢谢!
返回:
python - 为什么 urllib2 缺少我可以在 Firefox 源代码中看到的表字段?
我从 urllib2 收到的 html 缺少几十个数据字段,当我在 Firefox 中查看 URL 的源时可以看到这些数据字段。任何建议将不胜感激。这是它的样子:
从 FireFox 查看源代码:
从 urllib2 返回 html:
python - 如何直接使用 python 请求经过身份验证的 url
我想使用 urllib2 访问经过身份验证的页面。我希望有一个黑客可以直接做到这一点。就像是:
如果没有,我该如何使用身份验证?
python - 我如何知道网站的领域和 uri
我想使用 python 的 urllib2 进行身份验证,我需要一个 url 的领域和 uri。我如何得到它?
谢谢
python - 来自 http 流的非阻塞读取/日志
我有一个连接到 HTTP 流并记录它使用的文本数据的客户端。
我向流服务器发送 HTTP GET 请求...服务器回复并不断发布数据...它会定期发布文本或发送 ping(文本)消息...并且永远不会关闭连接。
我需要以非阻塞方式读取和记录它使用的数据。
我正在做这样的事情:
我的问题是:
当流是连续的时,这会阻塞吗?
每个块中读取了多少数据,可以指定/调整吗?
这是读取/记录 http 流的最佳方式吗?
python - 调用 urllib.urlopen 时跟踪/BPT 陷阱
出于某种原因,我在调用urllib.urlopen
. 我都试过了urllib
,urllib2
结果相同。这是引发错误的代码:
我应该补充一点,这段代码运行在带有 web.py 的 CherryPy 网络服务器上。
有人要求追溯。不幸的是,没有。Trace/BPT trap
被输出到终端并且过程终止。例如
编辑:我正在运行 OS X 10.6.2、web.py 0.33、Python 2.6.2 和 CherryPy 3.1.2。