使用python爬取百度热搜

爬虫第一课!实践爬取百度热搜

吃瓜必备 以后给够我上班摸鱼的素材了

1、导入要用的包

from bs4 import BeautifulSoup  # 网页解析,获取数据(需导入)
import re  # 正则表达式,进行文字匹配`
import urllib.request, urllib.error  # 制定URL,获取网页数据
import xlwt  # 进行excel操作
import time

2、使用正则表达式筛选有用数据

# 创建正则表达式对象,标记规则   热搜详情链接的规则
findTitle = re.compile(r'<div class="c-single-text-ellipsis">(.*?)</div>')#热搜名
findIntroduction= re.compile(r'<div class="hot-desc_1m_jR large_nSuFU">(.*)<a')#热搜简介 
findIndex = re.compile(r'<div class="hot-index_1Bl1a">(.*?)</div>')#热搜指数
#findLink = re.compile(r'<div class="hot-desc_1m_jR large_nSuFU">*<a href="(.*?)"></div>') # 热搜地址
#findImgSrc = re.compile(r'<img.*src="(.*?)"', re.S)#热搜图片地址

3、创建get表头

# 得到指定一个URL的网页内容
def askURL(url):
    head = {  # 模拟浏览器头部信息,向baidu服务器发送消息
        "User-Agent": "Mozilla / 5.0(Windows NT 10.0; Win64; x64) AppleWebKit / 537.36(KHTML, like Gecko) Chrome / 80.0.3987.122  Safari / 537.36"
    }
    # 用户代理,表示告诉Baidu服务器,我们是什么类型的机器、浏览器(本质上是告诉浏览器,我们可以接收什么水平的文件内容)
    request = urllib.request.Request(url, headers=head)
    html = ""
    try:
        response = urllib.request.urlopen(request)
        html = response.read().decode("utf-8")
    except urllib.error.URLError as e:
        if hasattr(e, "code"):
            print(e.code)
        if hasattr(e, "reason"):
            print(e.reason)
    return html

4、解析爬取到的热搜页面

def getData(url):
    datalist = []  #用来存储爬取的网页信息
    html = askURL(url)  # 保存获取到的网页源码
    # 逐一解析数据
    print("正在解析...")
    soup = BeautifulSoup(html, "html.parser")
    for item in soup.find_all('div', class_="category-wrap_iQLoo horizontal_1eKyQ"):  # 查找符合要求的字符串
        data = []  # 保存一个热搜所有信息
        item = str(item)
        title = re.findall(findTitle, item) # 通过正则表达式查找
        data.append(title)
        introduction = re.findall(findIntroduction, item)
        #introduction=str(introduction).replace(" ","")#去除空格
        data.append(introduction)
        index = re.findall(findIndex, item)
        data.append(index)
        #link = re.findall(findLink, item)
        # data.append(link)
        #imgSrc = re.findall(findImgSrc, item)
        #data.append(imgSrc)
        datalist.append(data)
    return datalist

5、以excel数据形势将数据保存下来,这里也可以使用数据库

# 保存数据到表格
def saveData(datalist,savepath):
    print("正在保存.......")
    book = xlwt.Workbook(encoding="utf-8",style_compression=0) #创建workbook对象
    sheet = book.add_sheet('百度热搜50', cell_overwrite_ok=True) #创建工作表
    col = ("标题","热点信息","热度")#,"链接地址","标题图片地址"
    for i in range(0,3):
        sheet.write(0,i,col[i])  #列名
    for i in range(len(datalist)):
        data = datalist[i]
        for j in range(0,3):
            print(data[j])#测试使用
            sheet.write(i+1,j,data[j])  #数据
    book.save(savepath) #保存

6、主函数 以当前时间命名文件

def main():
    baseurl = "https://top.baidu.com/board?tab=realtime"  #要爬取的网页链接
    # 1.爬取网页
    datalist = getData(baseurl)
    timeNow=time.strftime('%Y%m%d-%H-%M', time.localtime())
    savepath = timeNow+"百度热搜.xls"    #当前目录新建XLS,存储进去timeNow+
    print(savepath) 
    # 3.保存数据
    saveData(datalist,savepath)   

7、运行

if __name__ == "__main__":  # 当程序执行时
    # 调用函数
     main()
     print("爬取成功!")

展望:正则表达式那里有点问题,还没有处理图片网址和详情页地址;本想将热点绘柱状图,但数据一直转换不成功,还有在去除空格时,数据会自动转化,不得已放弃;不知为啥为jupty中使用函数传参光出问题,所以time放在主函数中,难道与运行顺序有关。下次想学图表绘制、训练模型、展示地图。
总结:第一次用爬虫,不算很难,确实是好用又强大的工具,有很多地方可以使用,大放异彩
2024年01月17日17:06爬取的数据

  • 8
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值