3

Webクローラー用のPythonでコードを書こうとしています。クロールしようとしているページが 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 に答える