Jon*_*onC 1 python url web-crawler bing-api
我在Python 2.6中使用Bing API编写了一个Web爬虫,它搜索某些文档,然后下载它们以便稍后进行分类.我一直在使用字符串方法并urllib.urlretrieve()下载其URL以.pdf,.ps等结尾的结果,但是当文档被"隐藏"在URL之后时,我遇到了麻烦:
http://www.oecd.org/officialdocuments/displaydocument/?cote=STD/CSTAT/WPNA(2008)25&docLanguage=En
那么,有两个问题.有没有一种方法可以判断一个URL是否有一个pdf/doc等文件,如果它没有这么明确地链接到它(例如www.domain.com/file.pdf)?有没有办法让Python抓住那个文件?
编辑:感谢您的回复,其中一些建议下载文件,看看它是否是正确的类型.唯一的问题是......我不知道该怎么做(见上面的问题#2).urlretrieve(<above url>)只给出一个html文件,其href包含相同的url.
没有办法从URL中告诉它会给你什么.即使它结束.pdf它仍然可以给你HTML或任何它喜欢的东西.
您可以执行HEAD请求并查看内容类型,如果服务器没有对您说谎,则会告诉您它是否为PDF.
或者,您可以下载它,然后确定您获得的是PDF.
在这种情况下,您所说的“未在 URL 中明确引用的文档”似乎就是所谓的“重定向”。基本上,服务器会告诉您必须从另一个 URL 获取文档。通常,python 的 urllib 会自动跟随这些重定向,以便您最终获得正确的文件。(并且 - 正如其他人已经提到的 - 您可以检查响应的 mime-type 标头以查看它是否是 pdf)。
但是,有问题的服务器在这里做了一些奇怪的事情。您请求 url,它会将您重定向到另一个 url。您请求另一个网址,它再次将您重定向...到同一个网址!再一次......再一次......在某些时候,urllib 认为这已经足够了,并且将停止跟随重定向,以避免陷入无限循环。
那么,当您使用浏览器时,您为什么能够获得 pdf?因为显然,如果您启用了 cookie,服务器只会提供 pdf。(为什么?你必须问负责服务器的人......)如果你没有cookie,它只会永远重定向你。
(检查urllib2和cookielib模块以获得对 cookie 的支持,本教程可能会有所帮助)
至少,这就是我认为导致问题的原因。我还没有真正尝试过用 cookie 来做。也可能是服务器不“想要”提供 pdf,因为它检测到您没有使用“普通”浏览器(在这种情况下,您可能需要摆弄 User-Agent 标头),但它这样做会是一种奇怪的方式。所以我的猜测是它在某个地方使用了“会话 cookie”,如果你还没有,请继续尝试重定向。
| 归档时间: |
|
| 查看次数: |
1035 次 |
| 最近记录: |