1. 程式人生 > >python中requests模組有些網站不能訪問解決方案

python中requests模組有些網站不能訪問解決方案

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()

現在便可以正常訪問一些普通的網站。