以下のWebサイトからコンテンツを入手したいです。 FirefoxやChromeなどのブラウザを使用すると、実際のWebサイトページを表示できますが、それを取得するためにPython Requestパッケージ(またはwget
コマンド)を使用すると、まったく異なるHTMLページが返されます。私はウェブサイトの開発者がこれのためにいくつかのブロックを作ったと思ったので、質問は以下のとおりです。
Pythonのリクエストやコマンドwgetを使ってブラウザにアクセスしないようにするにはどうすればよいですか?
User-Agent
ヘッダー を入力してください。
import requests
url = 'http://www.ichangtou.com/#company:data_000008.html'
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36'}
response = requests.get(url, headers=headers)
print(response.content)
参考までに、さまざまなブラウザ用のUser-Agent文字列のリストを次に示します。
補足として、 fake-useragent という非常に便利なサードパーティ製のパッケージがあります。
偽物
現実世界のデータベースを備えた最新の簡易ユーザーエージェント
デモ:
>>> from fake_useragent import UserAgent
>>> ua = UserAgent()
>>> ua.chrome
u'Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1667.0 Safari/537.36'
>>> ua.random
u'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.67 Safari/537.36'
この質問がまだ有効な場合
私が使った 偽のUserAgent
使い方:
from fake_useragent import UserAgent
import requests
ua = UserAgent()
print(ua.chrome)
header = {'User-Agent':str(ua.chrome)}
print(header)
url = "https://www.hybrid-analysis.com/recent-submissions?filter=file&sort=^timestamp"
htmlContent = requests.get(url, headers=header)
print(htmlContent)
出力:
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1309.0 Safari/537.17
{'User-Agent': 'Mozilla/5.0 (X11; OpenBSD i386) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36'}
<Response [200]>
Firefoxを偽物として使用してこれを試してみてください ユーザーエージェント (さらに、クッキーを使ったWebスクレイピングのための良い起動スクリプトです):
#!/usr/bin/env python2
# -*- coding: utf8 -*-
# vim:ts=4:sw=4
import cookielib, urllib2, sys
def doIt(uri):
cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
page = opener.open(uri)
page.addheaders = [('User-agent', 'Mozilla/5.0')]
print page.read()
for i in sys.argv[1:]:
doIt(i)
python script.py "http://www.ichangtou.com/#company:data_000008.html"
答えの根本は、質問をする人は、彼らが何をしているのかを知るためにJavaScriptインタプリタを持つ必要があるということです。私が見つけたのは、JavaScriptで解釈される前に、jsonのWebサイトで必要な情報をすべて入手できるということです。これにより、各Webページが同じ形式であることを期待してHTMLを解析する時間を大幅に節約できました。
あなたがリクエストを使ってウェブサイトからレスポンスを得るとき、あなたは解析される準備ができているフッタの中にJavaScript JSONを見つけるかもしれないので本当にHTML /テキストを見てください。