【问题标题】:Python: Access Denied at Random Points When Using RequestsPython:使用请求时在随机点拒绝访问
【发布时间】:2019-01-25 21:55:05
【问题描述】:

我正在使用 requests 和 beautifulsoup 浏览流行的漫画商店comixology,以便列出所有漫画标题和问题以及所有这些漫画的发布日期,因此我请求了大量的网页。不幸的是,中途我会得到错误:

您无权访问此服务器上的 (URL)

我尝试使用递归尝试请求的函数。但这不起作用 我没有把整个代码放进去,因为它很长。

def getUrl(url):
try:
    page = requests.get(url)
except:
    getUrl(url)
return page

【问题讨论】:

    标签: python-3.x beautifulsoup request


    【解决方案1】:

    User-Agent 请求标头包含一个特征字符串,允许网络协议对等方识别请求软件用户代理的应用程序类型、操作系统、软件供应商或软件版本。在服务器端验证 User-Agent 标头是一种常见操作,因此请务必使用有效浏览器的 User-Agent 字符串以避免被阻止。

    (来源:http://go-colly.org/articles/scraping_related_http_headers/

    您唯一需要做的就是设置一个合法的用户代理。因此添加标题以模拟浏览器。 :

    # This is a standard user-agent of Chrome browser running on Windows 10 
    headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36' } 
    

    例子:

    from bs4 import BeautifulSoup
    import requests 
    headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'}
    resp = requests.get('http://example.com', headers=headers).text 
    soup = BeautifulSoup(resp, 'html.parser') 
    

    此外,您可以添加另一组标头来伪装成合法的浏览器。添加更多这样的标题:

    headers = { 
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36', 
    'Accept' : 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 
    'Accept-Language' : 'en-US,en;q=0.5',
    'Accept-Encoding' : 'gzip', 
    'DNT' : '1', # Do Not Track Request Header 
    'Connection' : 'close'
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-18
      • 2014-12-21
      • 1970-01-01
      • 2015-05-27
      • 2019-02-27
      相关资源
      最近更新 更多