簡易網(wǎng)頁搜集器
前面我們已經(jīng)學(xué)會(huì)了簡單爬取瀏覽器頁面的爬蟲。但事實(shí)上我們的需求當(dāng)然不是爬取搜狗首頁或是B站首頁這么簡單,再不濟(jì),我們都希望可以爬取某個(gè)特定的有信息的頁面。
不知道在學(xué)會(huì)了爬取之后,你有沒有跟我一樣試著去爬取一些搜索頁面,比如說百度。像這樣的頁面
![](/d/20211017/903e78fe152a84be22e0b01f99c86ab4.gif)
注意我紅筆劃的部分,這是我打開的網(wǎng)頁?,F(xiàn)在我希望能爬取這一頁的數(shù)據(jù),按我們前面學(xué)的代碼,應(yīng)該是這樣寫的:
import requests
if __name__ == "__main__":
# 指定URL
url = "https://www.baidu.com/s?ie=utf-8f=8rsv_bp=1rsv_idx=2tn=93923645_hao_pgwd=%E5%A5%A5%E7%89%B9%E6%9B%BCrsv_spt=1oq=%25E7%2588%25AC%25E5%258F%2596%25E7%2599%25BE%25E5%25BA%25A6%25E9%25A6%2596%25E9%25A1%25B5rsv_pq=b233dcfd0002d2d8rsv_t=ccdbEuqbJfqtjnkFvevj%2BfxQ0Sj2UP88ixXHTNUNsmTa9yWEWTUEgxTta9r%2Fj3mXxDs%2BT1SUrqlang=cnrsv_dl=tbrsv_enter=1rsv_sug3=8rsv_sug1=5rsv_sug7=100rsv_sug2=0rsv_btype=tinputT=1424rsv_sug4=1424"
# 發(fā)送請求
response = requests.get(url)
# 獲取數(shù)據(jù)
page_text = response.text
# 存儲
with open("./奧特曼.html", "w", encoding = "utf-8") as fp:
fp.write(page_text)
print("爬取成功?。?!")
然而打開我們保存的文件,發(fā)現(xiàn)結(jié)果跟我們想的不太一樣
![](/d/20211017/65625979557be544003bf674d0c25809.gif)
我們發(fā)現(xiàn)我們保存的文件是一個(gè)空白的頁面,這是為什么呢?
其實(shí)上我們把網(wǎng)址改成搜狗的可能或更直觀一些(不知道為什么我這邊的搜狗總是打不開,所以就用百度做例子,可以自己寫寫有關(guān)搜狗搜索的代碼),同樣的代碼改成搜狗的網(wǎng)址結(jié)果是這樣的
![](/d/20211017/8831db0a65ea7d6bed59afe9c0d60ab4.gif)
我們發(fā)現(xiàn)其中有句話是 “ 網(wǎng)絡(luò)中存在異常訪問 ”,那么這句話是什么意思呢?
這句話的意思就是說,搜狗或是百度注意到發(fā)送請求的是爬蟲程序,而不是人工操作。
那么這其中的原理又是什么呢?
簡單來說,就是程序訪問和我們使用瀏覽器訪問是有區(qū)別的,被請求的服務(wù)器都是靠 user-agent 來判斷訪問者的身份,如果是瀏覽器就接受請求,否則就拒絕。這就是一個(gè)很常見的反爬機(jī)制。
那是不是我們就沒有辦法呢?
非也~所謂魔高一尺,道高一丈。既然要識別 user-agent ,那么我們就讓爬蟲模擬 user-agent 好了。
在 python 中模擬輸入數(shù)據(jù)或是 user-agent ,我們一般用字典
就這樣子寫:
header = {
"user-agent": "" # user-agent 的值 是一個(gè)長字符串
}
那么 user-agent 的值又是怎么得到的呢?
1. 打開任意網(wǎng)頁,右鍵點(diǎn)擊,選擇“檢查”
![](/d/20211017/01c8c4d4d8ce918855c41f1f04cf684c.gif)
2. 選擇“ Network ”(谷歌瀏覽器)(如果是中文,就選擇 “網(wǎng)絡(luò)” 這一項(xiàng))
![](/d/20211017/884f8ec690cc03be4cd27e91a95e071e.gif)
3. 如果發(fā)現(xiàn)點(diǎn)開是空白的,像這樣,那就刷新網(wǎng)頁
![](/d/20211017/ff28a11212b0d0dc196d0c6227b660c3.gif)
刷新后是這樣的:
![](/d/20211017/ad9d7872f17c8e0db3a83856c7c264a1.gif)
然后隨機(jī)選擇紅筆圈起來的一項(xiàng),我們會(huì)看到這樣的東西,然后在里面找到“user-agent”,把它的值復(fù)制下來就行了
![](/d/20211017/f062dfd70c414d64f7379156dedeaa4f.gif)
有了 “user-agent”, 我們在重新寫我們的爬取網(wǎng)頁的代碼,就可以了
import requests
if __name__ == "__main__":
# 指定URL
url = "https://www.baidu.com/s?ie=utf-8f=8rsv_bp=1rsv_idx=2tn=93923645_hao_pgwd=%E5%A5%A5%E7%89%B9%E6%9B%BCrsv_spt=1oq=%25E7%2588%25AC%25E5%258F%2596%25E7%2599%25BE%25E5%25BA%25A6%25E9%25A6%2596%25E9%25A1%25B5rsv_pq=b233dcfd0002d2d8rsv_t=ccdbEuqbJfqtjnkFvevj%2BfxQ0Sj2UP88ixXHTNUNsmTa9yWEWTUEgxTta9r%2Fj3mXxDs%2BT1SUrqlang=cnrsv_dl=tbrsv_enter=1rsv_sug3=8rsv_sug1=5rsv_sug7=100rsv_sug2=0rsv_btype=tinputT=1424rsv_sug4=1424"
# 模擬 “user-agent”,即 UA偽裝
header = {
"user-agent" : "" # 復(fù)制的 user-agent 的值
}
# 發(fā)送請求
response = requests.get(url, headers = header)
# 獲取數(shù)據(jù)
page_text = response.text
# 存儲
with open("./奧特曼(UA偽裝).html", "w", encoding = "utf-8") as fp:
fp.write(page_text)
print("爬取成功!?。?)
再次運(yùn)行,然后打開文件
![](/d/20211017/2db3403220e9a4b13c76cf0463f73c55.gif)
這次成功了,說明我們的爬蟲程序完美地騙過了服務(wù)器
到此這篇關(guān)于python爬蟲基礎(chǔ)之簡易網(wǎng)頁搜集器的文章就介紹到這了,更多相關(guān)python網(wǎng)頁搜集器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
您可能感興趣的文章:- Python中利用aiohttp制作異步爬蟲及簡單應(yīng)用
- Python爬蟲之線程池的使用
- python基礎(chǔ)之爬蟲入門
- python爬蟲請求庫httpx和parsel解析庫的使用測評
- Python爬蟲之爬取最新更新的小說網(wǎng)站
- 用Python爬蟲破解滑動(dòng)驗(yàn)證碼的案例解析
- Python爬蟲之必備chardet庫
- Python爬蟲框架-scrapy的使用
- Python爬蟲之爬取二手房信息
- python爬蟲之爬取百度翻譯
- Django利用Cookie實(shí)現(xiàn)反爬蟲的例子
- python爬蟲之生活常識解答機(jī)器人
- Python異步爬蟲實(shí)現(xiàn)原理與知識總結(jié)