【问题标题】:python urllib2 can't get correct webpagepython urllib2 无法获取正确的网页
【发布时间】:2014-11-11 10:24:30
【问题描述】:

我正在使用 urllib2 和 beautifulsoup 编写蜘蛛。但是我遇到了一些问题。

  1. 我无法正确下载网页。我试过了

    GET 'http://thesite.html',

    wget 'http://thesite.html',

    curl -O 'http://thesite.html',

在 linux 终端上,但质量很大,似乎是错误的编解码器。

  1. 然后我尝试使用file_get_contents('http://thesite.html'),也无法获取正确的网页。

  2. 然后我试了urllib2.urlopen('http://thesite.html'),不行。

  3. 无法检测到编码。 s = urllib2.urlopen('http://thesite.html') print chardet.detect(s) 并输出{'confidence':0.0, 'encoding':None}
  4. 我也用 urllib.request 尝试了 python3,我可以得到一个字节字符串,但是当我尝试将此字节解码为 utf-8 时,我收到一条错误消息。

有人可以帮我解决这个问题吗?如何像网络浏览器一样获取正确的网页。

【问题讨论】:

  • 我认为您会发现发布一两条错误消息可能有助于人们理解您的问题。
  • 该页面可能拒绝了您的用户代理。尝试改变它。
  • 感觉自己像个小偷,不好意思发细节。
  • 不知道细节的人怎么能帮忙?

标签: python beautifulsoup web-crawler urllib2


【解决方案1】:

你在下载什么?是文本还是二进制文件,例如图片?

二进制文件可以解释为什么 wget 和 curl 等标准工具会返回大量“质量”(混乱?),而chardet.detect() 在这种情况下会返回{'confidence': 0.0, 'encoding': None}

>>> import urllib2
>>> import chardet

>>> s = urllib2.urlopen('http://i.stack.imgur.com/uIM9Q.png?s=32&g=1').read()    # your avatar
>>> chardet.detect(s)
{'confidence': 0.0, 'encoding': None}

你在 Python 3 中得到的字节串是什么样的?否则,如果您太腼腆而无法发布 URL、回溯或其他详细信息,也许您可​​以发布一些该字符串?

【讨论】:

  • 非常感谢您提供如此详细的答案。我仍然没有解决这个问题,但我完成了我的工作,我更改为爬取另一个站点并且没有看到任何编码问题。我不得不说编码是网络爬虫的一个大问题。我会继续这个问题并尝试提供更多细节。
猜你喜欢
  • 2013-12-22
  • 2012-07-12
  • 1970-01-01
  • 2022-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多