[python3]糗事百科爬蟲【1】

案例背景

糗事百科,我們想要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')

爬蟲結果

在這裏插入圖片描述

結尾感慨

代碼寫的是不是很傻瓜。看的我都笑哭了。
沒事,後面會繼續優化的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章