3

我正在尝试在 python 中为 Web 爬虫编写代码。我想检查我要抓取的页面是否是 HTML 页面,而不是 .pdf/.doc/.docx 等页面。我不想检查扩展名为 .html 的 asp、aspx 或类似页面http://bing.com/travel/没有明确的 .html 扩展名,但它们是 html 页面。python有什么好的方法吗?

4

2 回答 2

5

这仅从服务器获取标头:

import urllib2
url = 'http://www.kernel.org/pub/linux/kernel/v3.0/testing/linux-3.7-rc6.tar.bz2'
req = urllib2.Request(url)
req.get_method = lambda: 'HEAD'
response = urllib2.urlopen(req)
content_type = response.headers.getheader('Content-Type')
print(content_type)

印刷

application/x-bzip2

您可以从中得出结论,这不是 HTML。你可以使用

'html' in content_type

以编程方式测试内容是否为 HTML(或可能是 XHTML)。如果您想更加确定内容是 HTML,您可以下载内容并尝试使用诸如lxmlBeautifulSoup之类的 HTML 解析器对其进行解析。

小心使用requests.get这样的:

import requests
r = requests.get(url)
print(r.headers['content-type'])

这需要很长时间,而且我的网络监视器显示持续负载让我相信这是在下载整个文件,而不仅仅是标题。

另一方面,

import requests
r = requests.head(url)
print(r.headers['content-type'])

仅获取标题。

于 2013-09-18T22:18:21.227 回答
3

不要理会标准库向您抛出的内容,而是尝试requests

>>> import requests
>>> r = requests.get("http://www.google.com")
>>> r.headers['content-type']
    'text/html; charset=ISO-8859-1'
于 2013-09-18T22:05:04.143 回答