python中requests模組有些網站不能訪問解決方案
阿新 • • 發佈:2019-01-07
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>
• 您可以嘗試切換網路環境,例如:關閉 Wi-Fi、關閉 VPN 等網路代理再嘗試訪問
</li>
<li>
• 如果您認為當前網路的封禁是誤報,請提交您的聯絡方式,以便我們核實
<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()
現在便可以正常訪問一些普通的網站。