03.获取网页源代码
生活随笔
收集整理的這篇文章主要介紹了
03.获取网页源代码
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
主要內容
一、Resquests 庫獲取網頁源代碼
1.1 使用Requests 庫獲取百度新聞的網頁源代碼
-
具體代碼:
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) -
獲取到的網頁源代碼:
<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> -
可以看到沒有獲取到真正的網頁源代碼,這是因為百度新聞網站只認可瀏覽器發送的訪問請求,不認可Python發送的訪問請求。
-
解決方案:此時需要通過設置requests.get()函數的參數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"}
-
1.2 改進版——模擬瀏覽器獲取真實網址源代碼
-
實現代碼:
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 關于 參數 headers 具體介紹
-
參數headers用于向網站提供訪問者的信息,其中的User-Agent(用戶代理)反映了訪問者使用的是哪種瀏覽器
-
雖然有時不加headers也能獲得網頁的源代碼(如爬取Python官網),但是headers的設置和使用并不麻煩,而且可以避免可能會出現的爬取失敗,所以還是建議加上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()函數訪問網址時,加上headers=headers參數即可
1.4 Requests庫的缺點
-
使用requests 庫獲取的是未經渲染的網頁源代碼,如果用它來爬取動態渲染的網頁,就往往爬取不斷我們想要的結果
-
快速驗證網頁是否被動態渲染的方法:
- 用右鍵快捷菜單查看網頁源代碼 ,若看到的網頁源代碼內容很少,也不包含用開發者工具能看到的信息,就可以判定用開發者工具看到的網頁源代碼是動態渲染后的結果
-
要從經過動態渲染的網頁中爬取數據的辦法:
- 需要使用Selenium庫打開一個模擬器訪問網頁,然后獲取渲染后的網頁源代碼
二、使用 Selenium 庫獲取網頁源代碼
2.1 模擬瀏覽器以及Selenium 庫的安裝
- 要使用Selenium庫爬取數據,除了需要為Python安裝Selenium庫,還需要安裝一個模擬瀏覽器(詳細安裝步驟看博客4)。Selenium庫控制這個模擬瀏覽器去訪問網頁,才能獲取網頁源代碼。
2.2 獲取網頁源代碼
-
使用Selenium庫獲取新浪財經股票信息
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) -
使用下面的代碼,就能關閉模擬瀏覽器
browser.quit()
三、使用requests 庫 和 Selenium 庫爬取網頁的優缺點
- 因為Requests庫是直接訪問網頁,爬取速度非常快;而Selenium庫要先打開模擬瀏覽器再訪問網頁,導致爬取速度較慢
- 如果說Requests庫可以爬取50%的網站,那么Selenium庫可以爬取95%的網站,大部分爬取難度較高的網站都可以用Selenium庫獲取網頁源代碼
- 實戰中通常將這兩個庫結合使用,實現優勢互補:如果用Requests庫能獲取到需要的網頁源代碼,那么優先使用Requests庫進行爬取;如果用Requests庫獲取不到,再使用Selenium庫進行爬取。
如果覺得文章不錯,可以給我點贊鼓勵一下我,歡迎收藏
關注我,我們一起學習,一起進步!!!
總結
以上是生活随笔為你收集整理的03.获取网页源代码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: three.js学习笔记(十四)——Sh
- 下一篇: 开发在线编程网站