03.获取网页源代码
主要內(nèi)容
一、Resquests 庫獲取網(wǎng)頁源代碼
1.1 使用Requests 庫獲取百度新聞的網(wǎng)頁源代碼
-
具體代碼:
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)頁源代碼:
<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àn)榘俣刃侣劸W(wǎng)站只認(rèn)可瀏覽器發(fā)送的訪問請求,不認(rèn)可Python發(fā)送的訪問請求。
-
解決方案:此時(shí)需要通過設(shè)置requests.get()函數(shù)的參數(shù)headers,以模擬瀏覽器進(jì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)站提供訪問者的信息,其中的User-Agent(用戶代理)反映了訪問者使用的是哪種瀏覽器
-
雖然有時(shí)不加headers也能獲得網(wǎng)頁的源代碼(如爬取Python官網(wǎng)),但是headers的設(shè)置和使用并不麻煩,而且可以避免可能會(huì)出現(xiàn)的爬取失敗,所以還是建議加上headers。
-
每次只需要只要記得在爬蟲程序的最前面寫上如下代碼:
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ǎng)址時(shí),加上headers=headers參數(shù)即可
1.4 Requests庫的缺點(diǎn)
-
使用requests 庫獲取的是未經(jīng)渲染的網(wǎng)頁源代碼,如果用它來爬取動(dòng)態(tài)渲染的網(wǎng)頁,就往往爬取不斷我們想要的結(jié)果
-
快速驗(yàn)證網(wǎng)頁是否被動(dòng)態(tài)渲染的方法:
- 用右鍵快捷菜單查看網(wǎng)頁源代碼 ,若看到的網(wǎng)頁源代碼內(nèi)容很少,也不包含用開發(fā)者工具能看到的信息,就可以判定用開發(fā)者工具看到的網(wǎng)頁源代碼是動(dòng)態(tài)渲染后的結(jié)果
-
要從經(jīng)過動(dòng)態(tài)渲染的網(wǎng)頁中爬取數(shù)據(jù)的辦法:
- 需要使用Selenium庫打開一個(gè)模擬器訪問網(wǎng)頁,然后獲取渲染后的網(wǎng)頁源代碼
二、使用 Selenium 庫獲取網(wǎng)頁源代碼
2.1 模擬瀏覽器以及Selenium 庫的安裝
- 要使用Selenium庫爬取數(shù)據(jù),除了需要為Python安裝Selenium庫,還需要安裝一個(gè)模擬瀏覽器(詳細(xì)安裝步驟看博客4)。Selenium庫控制這個(gè)模擬瀏覽器去訪問網(wǎng)頁,才能獲取網(wǎng)頁源代碼。
2.2 獲取網(wǎng)頁源代碼
-
使用Selenium庫獲取新浪財(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 庫 和 Selenium 庫爬取網(wǎng)頁的優(yōu)缺點(diǎn)
- 因?yàn)镽equests庫是直接訪問網(wǎng)頁,爬取速度非常快;而Selenium庫要先打開模擬瀏覽器再訪問網(wǎng)頁,導(dǎo)致爬取速度較慢
- 如果說Requests庫可以爬取50%的網(wǎng)站,那么Selenium庫可以爬取95%的網(wǎng)站,大部分爬取難度較高的網(wǎng)站都可以用Selenium庫獲取網(wǎng)頁源代碼
- 實(shí)戰(zhàn)中通常將這兩個(gè)庫結(jié)合使用,實(shí)現(xiàn)優(yōu)勢互補(bǔ):如果用Requests庫能獲取到需要的網(wǎng)頁源代碼,那么優(yōu)先使用Requests庫進(jìn)行爬取;如果用Requests庫獲取不到,再使用Selenium庫進(jìn)行爬取。
如果覺得文章不錯(cuò),可以給我點(diǎn)贊鼓勵(lì)一下我,歡迎收藏
關(guān)注我,我們一起學(xué)習(xí),一起進(jìn)步!!!
總結(jié)
以上是生活随笔為你收集整理的03.获取网页源代码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: three.js学习笔记(十四)——Sh
- 下一篇: 开发在线编程网站