尝试使用Python抓取数据时发生Http错误405
问题描述:
我想从网站抓取数据;但是我不断收到HTTP:错误405:不允许。我究竟做错了什么?尝试使用Python抓取数据时发生Http错误405
(我已经看过的文件,并试图自己的代码,只有我的网址到位的例子年代,我仍然有同样的错误。)
下面的代码:
import requests, urllib
from urllib.request import Request, urlopen
list_url= ["http://www.glassdoor.com/Reviews/WhiteWave-Reviews-E9768.htm"]
for url in list_url:
req = urllib.request.Request(url, headers={'User-Agent': 'Mozilla/5.0'})
response=urllib.request.urlopen(req).read()
如果我跳过用户代理术语,则会收到HTTP错误403:禁止。
在过去,我已经使用以下顺利地刮取数据(从其他网站):
for url in list_url:
raw_html = urllib.request.urlopen(url).read()
soup=None
soup = BeautifulSoup(raw_html,"lxml")
理想情况下,我想保持一个类似的结构,即,通过获取URL的内容到BeautifulSoup。 谢谢!
答
不知道究竟原因的问题,但试试这个代码,它是为我工作。
import http.client
connection = http.client.HTTPSConnection("www.glassdoor.com")
connection.request("GET", "/Reviews/WhiteWave-Reviews-E9768.htm")
res = connection.getresponse()
data = res.read()
答
你所得到的错误是“请原谅我们中断一下你的浏览器让我们觉得你一个机器人“。暗示刮刮是不允许的,他们的网页上有反刮机器人。
尝试使用假冒浏览器。链接到如何使用虚假浏览器发出请求。 (How to use Python requests to fake a browser visit?)
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'}
url = 'http://www.glassdoor.com/Reviews/WhiteWave-Reviews-E9768.htm'
web_page = requests.get(url,headers=headers)
我尝试这样做,我发现了什么是他们的网页获得通过JS加载。所以我认为你可能想使用无头浏览器(Selenium/PhantomJS)并且刮掉呈现的html页面。希望能帮助到你。