爬蟲實戰——百度貼吧
開始
首先使用chrome瀏覽器,進入百度貼吧
注意輸入框中的url
分析
為了進行具體的url分析,我在搜尋框中輸入”Python”,看一下url的變化
這時url變成了:
http://tieba.baidu.com/f?ie=utf-8&kw=python&fr=search&red_tag=b2531475437
通過分析,做一個測試, 刪除url一些東西:
http://tieba.baidu.com/f?&kw=python
依舊可以得到正常的頁面
下面進行翻頁測試:
得到這樣的一條url:
http://tieba.baidu.com/f?kw=python&ie=utf-8&pn=50
通過分析,再進行一次測試,刪除url中的一些東西:
得到下面的url
http://tieba.baidu.com/f?kw=python&pn=50
依舊可以得到相應的頁面,因此可以得出結論:
kw 和 pn 是這個頁面中最重要的關鍵詞,kw控制關鍵詞(其實就是keyword的縮寫), pn(其實就是page_number的縮寫)控制翻頁,每翻一頁,pn增加50,也就是說一頁有50條資料。
分析結束,開始程式碼
初始url先用這個,之後再慢慢修改: http://tieba.baidu.com/f?kw=python&pn=50
直接上程式碼,注意看程式碼中的註釋
# 爬取百度貼吧 import requests class BdTieba(): def __init__(self, name, pn): # 儲存貼吧名 self.name = name # 初始url self.base_url = "http://tieba.baidu.com/f?kw={}&pn=".format(name) # 構造請求頭 self.headers = { "User-Agent": "Mozilla / 5.0(Windows NT 10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/69.0.3497.100Safari/537.36" } # 2. 批量生成url # 使用列表推導式生成了url列表 self.url_list = [self.base_url + str(i*50) for i in range(pn)] # 列印測試 # print(self.url_list) # 3. 批量傳送請求,封裝傳送請求 def get_data(self, url): response = requests.get(url, headers=self.headers) return response.content def save_data(self, data, index): filename = self.name + "_{}.html".format(index) with open(filename, "wb") as f: f.write(data) def run(self): # 1.請求初始url,測試使用 # response = requests.get(url=self.base_url, headers=self.headers) # 列印測試,測試成功返回結果 # print(response.text) # 2.批量生成url for url in self.url_list: data = self.get_data(url) # 3.批量傳送請求 # 4.儲存網頁,為了儲存的網頁名字不重複,且有順序,這裡使用index進行區分 # 獲取當前url的index index = self.url_list.index(url) # 儲存 self.save_data(data, index) if __name__ == '__main__': bdspider = BdTieba("python", 10) bdspider.run()
這裡我只通過批量生成url,並批量獲取url響應,並儲存了url響應資料,這裡測試了10頁資料,如果想要爬取每個url中的資料,還需要進行頁面分析和提取,這裡就需要使用xpath,作為新手入門的一個教程,後續我會拿這個專案繼續改進,增加xpath解析,爬取每頁的文字資訊,這裡就先到這了。
後面我會寫一篇關於xpath的簡單快速上手文章,然後再對這個實戰進行下一步的更新
over~
peace~
個人部落格: www.limiao.tech
微信公眾號:TechBoard