python爬蟲基礎之簡易網頁搜集器
簡易網頁搜集器
前面我們已經學會瞭簡單爬取瀏覽器頁面的爬蟲。但事實上我們的需求當然不是爬取搜狗首頁或是B站首頁這麼簡單,再不濟,我們都希望可以爬取某個特定的有信息的頁面。
不知道在學會瞭爬取之後,你有沒有跟我一樣試著去爬取一些搜索頁面,比如說百度。像這樣的頁面
註意我紅筆劃的部分,這是我打開的網頁。現在我希望能爬取這一頁的數據,按我們前面學的代碼,應該是這樣寫的:
import requests if __name__ == "__main__": # 指定URL url = "https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=2&tn=93923645_hao_pg&wd=%E5%A5%A5%E7%89%B9%E6%9B%BC&rsv_spt=1&oq=%25E7%2588%25AC%25E5%258F%2596%25E7%2599%25BE%25E5%25BA%25A6%25E9%25A6%2596%25E9%25A1%25B5&rsv_pq=b233dcfd0002d2d8&rsv_t=ccdbEuqbJfqtjnkFvevj%2BfxQ0Sj2UP88ixXHTNUNsmTa9yWEWTUEgxTta9r%2Fj3mXxDs%2BT1SU&rqlang=cn&rsv_dl=tb&rsv_enter=1&rsv_sug3=8&rsv_sug1=5&rsv_sug7=100&rsv_sug2=0&rsv_btype=t&inputT=1424&rsv_sug4=1424" # 發送請求 response = requests.get(url) # 獲取數據 page_text = response.text # 存儲 with open("./奧特曼.html", "w", encoding = "utf-8") as fp: fp.write(page_text) print("爬取成功!!!")
然而打開我們保存的文件,發現結果跟我們想的不太一樣
我們發現我們保存的文件是一個空白的頁面,這是為什麼呢?
其實上我們把網址改成搜狗的可能或更直觀一些(不知道為什麼我這邊的搜狗總是打不開,所以就用百度做例子,可以自己寫寫有關搜狗搜索的代碼),同樣的代碼改成搜狗的網址結果是這樣的
我們發現其中有句話是 “ 網絡中存在異常訪問 ”,那麼這句話是什麼意思呢?
這句話的意思就是說,搜狗或是百度註意到發送請求的是爬蟲程序,而不是人工操作。
那麼這其中的原理又是什麼呢?
簡單來說,就是程序訪問和我們使用瀏覽器訪問是有區別的,被請求的服務器都是靠 user-agent 來判斷訪問者的身份,如果是瀏覽器就接受請求,否則就拒絕。這就是一個很常見的反爬機制。
那是不是我們就沒有辦法呢?
非也~所謂魔高一尺,道高一丈。既然要識別 user-agent ,那麼我們就讓爬蟲模擬 user-agent 好瞭。
在 python 中模擬輸入數據或是 user-agent ,我們一般用字典
就這樣子寫:
header = { "user-agent": "" # user-agent 的值 是一個長字符串 }
那麼 user-agent 的值又是怎麼得到的呢?
1. 打開任意網頁,右鍵點擊,選擇“檢查”
2. 選擇“ Network ”(谷歌瀏覽器)(如果是中文,就選擇 “網絡” 這一項)
3. 如果發現點開是空白的,像這樣,那就刷新網頁
刷新後是這樣的:
然後隨機選擇紅筆圈起來的一項,我們會看到這樣的東西,然後在裡面找到“user-agent”,把它的值復制下來就行瞭
有瞭 “user-agent”, 我們在重新寫我們的爬取網頁的代碼,就可以瞭
import requests if __name__ == "__main__": # 指定URL url = "https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=2&tn=93923645_hao_pg&wd=%E5%A5%A5%E7%89%B9%E6%9B%BC&rsv_spt=1&oq=%25E7%2588%25AC%25E5%258F%2596%25E7%2599%25BE%25E5%25BA%25A6%25E9%25A6%2596%25E9%25A1%25B5&rsv_pq=b233dcfd0002d2d8&rsv_t=ccdbEuqbJfqtjnkFvevj%2BfxQ0Sj2UP88ixXHTNUNsmTa9yWEWTUEgxTta9r%2Fj3mXxDs%2BT1SU&rqlang=cn&rsv_dl=tb&rsv_enter=1&rsv_sug3=8&rsv_sug1=5&rsv_sug7=100&rsv_sug2=0&rsv_btype=t&inputT=1424&rsv_sug4=1424" # 模擬 “user-agent”,即 UA偽裝 header = { "user-agent" : "" # 復制的 user-agent 的值 } # 發送請求 response = requests.get(url, headers = header) # 獲取數據 page_text = response.text # 存儲 with open("./奧特曼(UA偽裝).html", "w", encoding = "utf-8") as fp: fp.write(page_text) print("爬取成功!!!")
再次運行,然後打開文件
這次成功瞭,說明我們的爬蟲程序完美地騙過瞭服務器
到此這篇關於python爬蟲基礎之簡易網頁搜集器的文章就介紹到這瞭,更多相關python網頁搜集器內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- Python Requests爬蟲之求取關鍵詞頁面詳解
- Python實現爬取某站視頻彈幕並繪制詞雲圖
- Python爬蟲UA偽裝爬取的實例講解
- Python爬蟲實戰之虎牙視頻爬取附源碼
- 詳解如何使用Python網絡爬蟲獲取招聘信息