首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >检查页面是否为python中的HTML页面?

检查页面是否为python中的HTML页面?
EN

Stack Overflow用户
提问于 2013-09-19 05:59:52
回答 2查看 2.5K关注 0票数 3

我正在尝试为网络爬虫写一段python代码。我想检查我要抓取的页面是否是HTML页面,而不是像.pdf/.doc/.docx等那样的页面。我不想用扩展.html来检查它,因为asp、aspx或像http://bing.com/travel/这样的页面不会显式地.html扩展,但它们是.html页面。在python中有什么好的方法吗?

EN

回答 2

Stack Overflow用户

发布于 2013-09-19 06:18:21

这将仅从服务器获取标头:

代码语言:javascript
运行
复制
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)

打印

代码语言:javascript
运行
复制
application/x-bzip2

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

代码语言:javascript
运行
复制
'html' in content_type

以编程方式测试内容是否为HTML (或可能是XHTML)。如果您想更确定内容是HTML语言,可以下载内容并尝试使用lxmlBeautifulSoup等HTML语言解析器解析它。

注意不要像这样使用requests.get

代码语言:javascript
运行
复制
import requests
r = requests.get(url)
print(r.headers['content-type'])

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

另一方面,

代码语言:javascript
运行
复制
import requests
r = requests.head(url)
print(r.headers['content-type'])

仅获取标头。

票数 5
EN

Stack Overflow用户

发布于 2013-09-19 06:05:04

不要为标准库向您抛出的东西而烦恼,而是尝试requests

代码语言:javascript
运行
复制
>>> import requests
>>> r = requests.get("http://www.google.com")
>>> r.headers['content-type']
    'text/html; charset=ISO-8859-1'
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18883086

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档