[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')

爬虫结果

在这里插入图片描述

结尾感慨

代码写的是不是很傻瓜。看的我都笑哭了。
没事,后面会继续优化的。

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