python中requests模块有些网站不能访问解决方案

版权声明:为NH4L所有,转载请注明 https://blog.csdn.net/LeeGe666/article/details/81290144

python学习中爬取网站视频时由于python本身不能地址限制的原因,不能直接用response = requests.get(url)获取到网页源代码,进而无法爬取网站信息。
我以猫眼网为例:

访问猫眼代码如下:

import requests
from requests.exceptions import RequestException
def get_one_page(url):
    response = requests.get(url)
    try:
        if response.status_code == 200:
            return response.text
        return None
    except RequestException:
        return None
def main():
    url = 'http://maoyan.com/board/4'
    html = get_one_page(url)
    print(html)
if __name__ == '__main__':
    main()

控制台会出现这样的代码,如果把它写在html里,就是一个禁止访问的页面:

<body>
  <header>
    <h3><span class="icon">⛔️</span>很抱歉,您的访问被禁止了</h3>
  </header>
  <main>
    <p>? 如何恢复?</p>
    <ol>
      <li>
        &nbsp;•&nbsp;&nbsp;您可以尝试切换网络环境,例如:关闭 Wi-Fi、关闭 VPN 等网络代理再尝试访问
      </li>
      <li>
        &nbsp;•&nbsp;&nbsp;如果您认为当前网络的封禁是误报,请提交您的联系方式,以便我们核实
        <form method="POST" action="?__oceanus_forbidden=1">
          <input type="text" name="contact" required placeholder="请输入手机号或者邮箱地址" />
          <button class="row" type="submit">提交</button>
        </form>
      </li>
    </ol>
  </main>
  <footer>
    <a href="https://maoyan.com">猫眼电影</a>
    <a href="mailto:oceanus.feedback@maoyan.com">邮件反馈</a>
  </footer>
</body>

解决方法:是这种访问一般都是代码后台访问网站,现在稍微有点反扒意识的网站,都不能正常爬取到,这个时候返回的状态码也不是200,所以我们给他加入头部信息,可以直接在网页上审查元素,点network,再点doc,查看他的(user-agent)用户代理就行的,这就是个访问浏览器的方式,当我们不用这个头部信息的时候,有些网站就认为我们不是从浏览器访问的,就不给你爬取,所以我们加上这个头部信息就行了,但是有些网站的反扒措施比较好,就像知乎就算把所有的头部信息都加在里面,甚至是登录后的cookies,也不能拿到首页的源代码必须模拟登录,现在介绍这个是最简单的,就是加个用户代理“Mizilla/5.0“就行了。

import requests
from requests.exceptions import RequestException
def get_one_page(url):
    headers = {"user-agent": "Mizilla/5.0"}
    response = requests.get(url, headers=headers)
    try:
        if response.status_code == 200:
            return response.text
        return None
    except RequestException:
        return Noneain():
    url = 'http://maoyan.com/board/4'
    html = get_one_page(url)
    print(html)
if __name__ == '__main__':
    main()

现在便可以正常访问一些普通的网站。

猜你喜欢

转载自blog.csdn.net/LeeGe666/article/details/81290144