Python爬取HTTPS网页数据

Python爬取HTTPS网页数据失败

第一种方式


import requests
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:82.0) Gecko/20100101 Firefox/82.0'
    }

    # r = requests.get(url, headers=headers)
    #
    # df = pd.read_html(r.text)
    # print(df)

第二种方式

 # encoding:UTF-8
    import urllib.request
    cookies = "xxxxxx"
    #
    req = urllib.request.Request(url=url, headers=headers, cookies=cookies)
    #
    res = urllib.request.urlopen(req)

    data = res.read()
    print(data)

第三种方式


    # resp = requests.get(url, headers=headers)
    # soup = BeautifulSoup(resp.text, 'html.parser')
    #
    # # 取得各篇 blog 的所有文字
    # divs = soup.find_all('div', 'sc-euitrJ')
    # for div in divs:
    #     print(div.text)

结果都是提示 urllib.error.HTTPError: HTTP Error 403: Forbidden

请问这种情况一般是什么原因引起的?

header全加了

 headers = {
        "Accept": "* / *",
        "Accept - Encoding": "gzip, deflate, br",
        "Accept - Language": "en - US, en;q = 0.5",
        "Cache - Control": "no - cache",
        "Connection": "keep - alive",
        "Content - Length": 424,
        "Content - Type": "application / json",
        # "Cookie": "_ga=GA1.2.467839XXXX; _gid=GA1.2.107XXXX",
        "Host": "xxxxxx",

        "Origin": "https: // xxxx",
        "Pragma": "no - cache",
        "Referer":
            "https: // XXXX",
        "TE": "Trailers",
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:82.0) Gecko/20100101 Firefox/82.0'
    }
        r = requests.post(url, headers=headers,  verify=False)
阅读 8.6k
3 个回答

我也经常写爬虫,除非特殊情况,请求的头部(header)一般只需要下面中的几个:

  • Cookie
  • Referer
  • Origin
  • Content-Type
  • User-Agent
  • Host

再根据请求的返回信息(403 Forbidden)可以猜测应该是 Cookie 不对或者没有设置 Cookie。

另外,如果网站的认证信息不是放在 Cookie 中的话,比如用的是 session,可以考虑使用 requests.Session() 先创建一个会话,并使用这个会话进行登录,然后再基于这个会话进行访问网站内容。

希望可以相互学习爬虫相关的内容,这是我的邮箱:mailto:k8scat@gmail.com

可能的原因很多。

  1. 你的 url 有问题,指向一个你无权访问的位置,可能是未登录或者 url 本身有错误或者 querystring 有问题等等
  2. 因为各种原因,被反爬了

403 是 HTTP 服务器返回的,如果你在爬一个静态网站,那一般就是 url 出问题了。

如果你在爬一个非静态的网站,那被反爬、给错参数、需要登录之类的可能更大一些。

打印原始响应信息看看. 另外用浏览器返回一下, 然后把浏览器里面的header全加到python里面再试试.

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题