開始
首先使用chrome瀏覽器洽沟,進入百度貼吧
注意輸入框中的url
分析
為了進行具體的url分析,我在搜索框中輸入"Python"蜗细,看一下url的變化
觀察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條數(shù)據(jù)传泊。
分析結束,開始代碼
初始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. 批量發(fā)送請求急前,封裝發(fā)送請求
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.批量發(fā)送請求
# 4.保存網(wǎng)頁宴凉,為了保存的網(wǎng)頁名字不重復,且有順序恬口,這里使用index進行區(qū)分
# 獲取當前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響應數(shù)據(jù)楷兽,這里測試了10頁數(shù)據(jù)地熄,如果想要爬取每個url中的數(shù)據(jù),還需要進行頁面分析和提取芯杀,這里就需要使用xpath端考,作為新手入門的一個教程,后續(xù)我會拿這個項目繼續(xù)改進揭厚,增加xpath解析却特,爬取每頁的文字信息,這里就先到這了筛圆。
后面我會寫一篇關于xpath的簡單快速上手文章裂明,然后再對這個實戰(zhàn)進行下一步的更新
over~
peace~
個人博客: www.limiao.tech
微信公眾號:TechBoard