Webクローラー用のPythonでコードを書こうとしています。クロールしようとしているページが HTML ページであり、.pdf/.doc/.docx などのようなページではないかどうかを確認したい.拡張子 .html を asp、aspx、または次のようなページで確認したくないhttp://bing.com/travel/は明示的に .html 拡張子を付けませんが、それらは html ページです。Pythonで何か良い方法はありますか?
2694 次
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 であることをさらに確認したい場合は、コンテンツをダウンロードして、lxmlやBeautifulSoupなどの 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 に答える