03.获取网页源代码
主要內(nèi)容
一、Resquests 庫(kù)獲取網(wǎng)頁(yè)源代碼
1.1 使用Requests 庫(kù)獲取百度新聞的網(wǎng)頁(yè)源代碼
-
具體代碼:
import requests url = 'https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=阿里巴巴' res = requests.get(url).text print(res) -
獲取到的網(wǎng)頁(yè)源代碼:
<html> <head><script>location.replace(location.href.replace("https://","http://"));</script> </head> <body><noscript><meta http-equiv="refresh" content="0;url=http://www.baidu.com/"></noscript> </body> </html> -
可以看到?jīng)]有獲取到真正的網(wǎng)頁(yè)源代碼,這是因?yàn)榘俣刃侣劸W(wǎng)站只認(rèn)可瀏覽器發(fā)送的訪問(wèn)請(qǐng)求,不認(rèn)可Python發(fā)送的訪問(wèn)請(qǐng)求。
-
解決方案:此時(shí)需要通過(guò)設(shè)置requests.get()函數(shù)的參數(shù)headers,以模擬瀏覽器進(jìn)行訪問(wèn)。
headers = {"User-Agent":"Mozilla / 5.0(WindowsNT10.0;Win64;x64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 103.0.5060.114Safari / 537.36Edg / 103.0.1264.62"}
-
1.2 改進(jìn)版——模擬瀏覽器獲取真實(shí)網(wǎng)址源代碼
-
實(shí)現(xiàn)代碼:
import requests url = 'https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=阿里巴巴' headers = {"User-Agent":"Mozilla / 5.0(WindowsNT10.0;Win64;x64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 103.0.5060.114Safari / 537.36Edg / 103.0.1264.62"} res = requests.get(url,headers=headers).text print(res)
1.3 關(guān)于 參數(shù) headers 具體介紹
-
參數(shù)headers用于向網(wǎng)站提供訪問(wèn)者的信息,其中的User-Agent(用戶(hù)代理)反映了訪問(wèn)者使用的是哪種瀏覽器
-
雖然有時(shí)不加headers也能獲得網(wǎng)頁(yè)的源代碼(如爬取Python官網(wǎng)),但是headers的設(shè)置和使用并不麻煩,而且可以避免可能會(huì)出現(xiàn)的爬取失敗,所以還是建議加上headers。
-
每次只需要只要記得在爬蟲(chóng)程序的最前面寫(xiě)上如下代碼:
headers = {"User-Agent":"Mozilla / 5.0(WindowsNT10.0;Win64;x64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 103.0.5060.114Safari / 537.36Edg / 103.0.1264.62"}- 然后每次使用requests.get()函數(shù)訪問(wèn)網(wǎng)址時(shí),加上headers=headers參數(shù)即可
1.4 Requests庫(kù)的缺點(diǎn)
-
使用requests 庫(kù)獲取的是未經(jīng)渲染的網(wǎng)頁(yè)源代碼,如果用它來(lái)爬取動(dòng)態(tài)渲染的網(wǎng)頁(yè),就往往爬取不斷我們想要的結(jié)果
-
快速驗(yàn)證網(wǎng)頁(yè)是否被動(dòng)態(tài)渲染的方法:
- 用右鍵快捷菜單查看網(wǎng)頁(yè)源代碼 ,若看到的網(wǎng)頁(yè)源代碼內(nèi)容很少,也不包含用開(kāi)發(fā)者工具能看到的信息,就可以判定用開(kāi)發(fā)者工具看到的網(wǎng)頁(yè)源代碼是動(dòng)態(tài)渲染后的結(jié)果
-
要從經(jīng)過(guò)動(dòng)態(tài)渲染的網(wǎng)頁(yè)中爬取數(shù)據(jù)的辦法:
- 需要使用Selenium庫(kù)打開(kāi)一個(gè)模擬器訪問(wèn)網(wǎng)頁(yè),然后獲取渲染后的網(wǎng)頁(yè)源代碼
二、使用 Selenium 庫(kù)獲取網(wǎng)頁(yè)源代碼
2.1 模擬瀏覽器以及Selenium 庫(kù)的安裝
- 要使用Selenium庫(kù)爬取數(shù)據(jù),除了需要為Python安裝Selenium庫(kù),還需要安裝一個(gè)模擬瀏覽器(詳細(xì)安裝步驟看博客4)。Selenium庫(kù)控制這個(gè)模擬瀏覽器去訪問(wèn)網(wǎng)頁(yè),才能獲取網(wǎng)頁(yè)源代碼。
2.2 獲取網(wǎng)頁(yè)源代碼
-
使用Selenium庫(kù)獲取新浪財(cái)經(jīng)股票信息
import time from selenium import webdriver browser = webdriver.Chrome() browser.get('https://finance.sina.com.cn/stock/') data = browser.page_source # 核心代碼 print(data) time.sleep(1000) -
使用下面的代碼,就能關(guān)閉模擬瀏覽器
browser.quit()
三、使用requests 庫(kù) 和 Selenium 庫(kù)爬取網(wǎng)頁(yè)的優(yōu)缺點(diǎn)
- 因?yàn)镽equests庫(kù)是直接訪問(wèn)網(wǎng)頁(yè),爬取速度非常快;而Selenium庫(kù)要先打開(kāi)模擬瀏覽器再訪問(wèn)網(wǎng)頁(yè),導(dǎo)致爬取速度較慢
- 如果說(shuō)Requests庫(kù)可以爬取50%的網(wǎng)站,那么Selenium庫(kù)可以爬取95%的網(wǎng)站,大部分爬取難度較高的網(wǎng)站都可以用Selenium庫(kù)獲取網(wǎng)頁(yè)源代碼
- 實(shí)戰(zhàn)中通常將這兩個(gè)庫(kù)結(jié)合使用,實(shí)現(xiàn)優(yōu)勢(shì)互補(bǔ):如果用Requests庫(kù)能獲取到需要的網(wǎng)頁(yè)源代碼,那么優(yōu)先使用Requests庫(kù)進(jìn)行爬取;如果用Requests庫(kù)獲取不到,再使用Selenium庫(kù)進(jìn)行爬取。
如果覺(jué)得文章不錯(cuò),可以給我點(diǎn)贊鼓勵(lì)一下我,歡迎收藏
關(guān)注我,我們一起學(xué)習(xí),一起進(jìn)步!!!
總結(jié)
以上是生活随笔為你收集整理的03.获取网页源代码的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: three.js学习笔记(十四)——Sh
- 下一篇: 开发在线编程网站