【问题标题】:Http error 405 when trying to scrape data with Python 3.3尝试使用 Python 3.3 抓取数据时出现 Http 错误 405
【发布时间】:2017-04-30 01:24:55
【问题描述】:

我想从网站上抓取数据;但是我不断收到 HTTP:错误 405:不允许。我做错了什么?

(我查看了文档,并尝试了他们的代码,只有我的 url 代替了示例的;我仍然有同样的错误。)

代码如下:

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。 谢谢!

【问题讨论】:

    标签: python-3.x web-scraping urllib http-status-code-405


    【解决方案1】:

    您收到的错误是“请原谅我们的打扰。您的浏览器的某些问题让我们认为您是机器人”。意味着不允许抓取,并且他们的网页上有反抓取机器人。

    尝试使用假浏览器。链接到如何使用假浏览器发出请求。 (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 页面。希望对您有所帮助。

    【讨论】:

      【解决方案2】:

      不确定问题的确切原因,但试试这个对我有用的代码:

      import http.client
      
      connection = http.client.HTTPSConnection("www.glassdoor.com")
      connection.request("GET", "/Reviews/WhiteWave-Reviews-E9768.htm")
      
      res = connection.getresponse()
      data = res.read()
      

      【讨论】:

        猜你喜欢
        • 2018-01-01
        • 2019-09-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多