案例背景
糗事百科,我们想要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')
爬虫结果
结尾感慨
代码写的是不是很傻瓜。看的我都笑哭了。
没事,后面会继续优化的。