案例背景
糗事百科,我們想要python爬蟲。爬什麼呢?
爬取每個段子的作者名稱、頭像、性別、年齡、段子內容。
因爲是多頁的且我是新手,所以我們先從第一頁開始做起low版搞起,後面再抽象方法高級版
本次要求:針對第一頁,爬取每個段子的作者名稱、頭像、性別、年齡、段子內容。然後保存到excel中
https://www.qiushibaike.com/hot/page/1/
第一步
導入庫
#coding=utf-8
import requests
import io
import sys
import xlwt
from bs4 import BeautifulSoup
第二步
獲取網頁代碼
resp=requests.get('https://www.qiushibaike.com/hot/page/1/') #請求具體某一詳情頁
#print(resp) #打印請求結果的狀態碼
#print(resp.content) #打印請求到的網頁源碼
bsobj=BeautifulSoup(resp.content,'lxml') #將網頁源碼構造成BeautifulSoup對象,方便操作
a_list=bsobj.findAll('div',class_='author clearfix',) #獲取網頁中的所有class標籤對象定位
i=range(len(a_list))
b_list=bsobj.find_all("div", {"class": "content"})
#print(len(b_list))
#a_list=bsobj.find_all(text_="qiushi_tag")
#print(a_list)
第三步
分析網頁代碼,獲取作者、頭像、性別、年齡、段子內容。
並且保存Excel
3.1 分析網頁代碼
3.2 保存到Excel
book = xlwt.Workbook(encoding="utf-8", style_compression=0) # 創建workbook對象
sheet = book.add_sheet('糗事百科', cell_overwrite_ok=True) # 創建工作表
col = ("作者", "作者頭像", "性別", "年齡", "段子內容信息")
for k in range(0,len(col)):
sheet.write(0,k,col[k]) #設置好每一列的列名
for j in i:
data = [] # 保存一個作者的所有信息
author = a_list[j].find(name="h2").get_text().replace('\n','') # 存放作者名字
data.append(author)
img = a_list[j].find("img").get("src") # 存放作者頭像
data.append(img)
line = a_list[j].find("div", class_="articleGender")
gender = line["class"][1].replace("Icon", "")#存放作者性別
age = line.get_text() # 存放作者年齡
data.append(gender)
data.append(age)
info=b_list[j].find("span").get_text().replace('\n','')#存放每個作者的段子內容。因爲父節點不同,導致需要單獨寫一個b_list.同一個父節點的情況下,應該也是有辦法的,繼續找方法
data.append(info)
# 保存數據到excel中
for g in range(0,5):#段子內容爲什麼是5
sheet.write(j+1,g,data[g])
book.save('data.xlsx')
完整代碼如下
#coding=utf-8
import requests
import io
import sys
import xlwt
from bs4 import BeautifulSoup
resp=requests.get('https://www.qiushibaike.com/hot/page/1/') #請求具體某一詳情頁
#print(resp) #打印請求結果的狀態碼
#print(resp.content) #打印請求到的網頁源碼
bsobj=BeautifulSoup(resp.content,'lxml') #將網頁源碼構造成BeautifulSoup對象,方便操作
a_list=bsobj.findAll('div',class_='author clearfix',) #獲取網頁中的所有class標籤對象定位
i=range(len(a_list))
b_list=bsobj.find_all("div", {"class": "content"})
#print(len(b_list))
#a_list=bsobj.find_all(text_="qiushi_tag")
#print(a_list)
book = xlwt.Workbook(encoding="utf-8", style_compression=0) # 創建workbook對象
sheet = book.add_sheet('糗事百科', cell_overwrite_ok=True) # 創建工作表
col = ("作者", "作者頭像", "性別", "年齡", "段子內容信息")
for k in range(0,len(col)):
sheet.write(0,k,col[k]) #設置好每一列的列名
for j in i:
data = [] # 保存一個作者的所有信息
author = a_list[j].find(name="h2").get_text().replace('\n','') # 存放作者名字
data.append(author)
img = a_list[j].find("img").get("src") # 存放作者頭像
data.append(img)
line = a_list[j].find("div", class_="articleGender")
gender = line["class"][1].replace("Icon", "")#存放作者性別
age = line.get_text() # 存放作者年齡
data.append(gender)
data.append(age)
info=b_list[j].find("span").get_text().replace('\n','')#存放每個作者的段子內容。因爲父節點不同,導致需要單獨寫一個b_list.同一個父節點的情況下,應該也是有辦法的,繼續找方法
data.append(info)
# 保存數據到excel中
for g in range(0,5):#段子內容爲什麼是5
sheet.write(j+1,g,data[g])
book.save('data.xlsx')
爬蟲結果
結尾感慨
代碼寫的是不是很傻瓜。看的我都笑哭了。
沒事,後面會繼續優化的。