web-dev-qa-db-ja.com

ブラウザリクエストを偽造するためにPythonリクエストを使用する方法

以下のWebサイトからコンテンツを入手したいです。 FirefoxやChromeなどのブラウザを使用すると、実際のWebサイトページを表示できますが、それを取得するためにPython Requestパッケージ(またはwgetコマンド)を使用すると、まったく異なるHTMLページが返されます。私はウェブサイトの開発者がこれのためにいくつかのブロックを作ったと思ったので、質問は以下のとおりです。

Pythonのリクエストやコマンドwgetを使ってブラウザにアクセスしないようにするにはどうすればよいですか?

http://www.ichangtou.com/#company:data_000008.html

87
user1726366

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'
204
alecxe

この質問がまだ有効な場合

私が使った 偽の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]>
21
Umesh Kaushik

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"
7
Gilles Quenot

答えの根本は、質問をする人は、彼らが何をしているのかを知るためにJavaScriptインタプリタを持つ必要があるということです。私が見つけたのは、JavaScriptで解釈される前に、jsonのWebサイトで必要な情報をすべて入手できるということです。これにより、各Webページが同じ形式であることを期待してHTMLを解析する時間を大幅に節約できました。

あなたがリクエストを使ってウェブサイトからレスポンスを得るとき、あなたは解析される準備ができているフッタの中にJavaScript JSONを見つけるかもしれないので本当にHTML /テキストを見てください。

2
Daniel Butler