编写网络爬虫采集百度热搜榜网页

大数据学习路线图

作者:厦门大学计算机系林子雨副教授
说明:本博客是与林子雨编著《数据采集与预处理》教材配套的教学资料。
操作系统:Ubuntu22.04
编程语言:Python3.10

采集百度“热搜榜”网页(https://top.baidu.com/board?tab=realtime) 上的数据,并解析成指定的格式显示到屏幕上。可以打开一个浏览器,访问要爬取的网页,然后在浏览器中查看网页源代码,在源代码中找到排名、标题、热度所在的位置,总结出它们共同的特征,就可以将它们全部提取出来了,具体实现代码如下:

# 导入必要库
import requests
from bs4 import BeautifulSoup

def extract_data(html_content):
    soup = BeautifulSoup(html_content, 'html.parser')
    items = []
    for div in soup.find_all('div', {'class': 'category-wrap_iQLoo'}):
        rank_div = div.find('div', {'class': 'index_1Ew5p'})
        rank = rank_div.get_text(strip=True) if rank_div else None
        title_div = div.find('div', {'class': 'c-single-text-ellipsis'})
        title = title_div.get_text(strip=True) if title_div else None
        hotness_div = div.find('div', {'class': 'hot-index_1Bl1a'})
        hotness = hotness_div.get_text(strip=True) if hotness_div else None
        items.append((rank, title, hotness))
    return items

def save_to_file(items):
    with open('baidu_hot_top.txt', 'w') as file:
        for item in items:
            file.write(f'排名:{item[0]}, 标题:{item[1]}, 热度:{item[2]}\n')

# 获取HTML内容
response = requests.get('https://top.baidu.com/board?tab=realtime')
response.encoding = 'utf-8'  # 确保正确的字符编码
html_content = response.text

# 抽取数据
items = extract_data(html_content)

# 保存到文本文件
save_to_file(items)

下面是2024年1月5日爬取的结果:

排名:, 标题:在奋进中拥抱梦想 成就未来, 热度:4977679
排名:1, 标题:李铁对着镜头说非常后悔, 热度:4953469
排名:2, 标题:朝军发射200多枚炮弹 韩国发布避难令, 热度:4818052
排名:3, 标题:中国经济的三个历史新高, 热度:4789397
排名:4, 标题:爱泼斯坦文件牵出霍金, 热度:4672546
排名:5, 标题:主持人发争议言论后涨粉超700万, 热度:4578610
排名:6, 标题:听障父母摆摊给女儿买人工耳蜗, 热度:4453921
排名:7, 标题:曝老君山景区工作人员打伤游客, 热度:4347159
排名:8, 标题:证监会辟谣期货量化交易被叫停, 热度:4245452
排名:9, 标题:大闹东航机舱乘客被行拘, 热度:4125216
排名:10, 标题:福彩回应主持人疑提前播报中奖球号, 热度:4029711
排名:11, 标题:家人回应7旬爷爷老来得子, 热度:3955494
排名:12, 标题:哈尔滨为什么叫尔滨, 热度:3866135
排名:13, 标题:肖战黑粉被强执3.7万, 热度:3709750
排名:14, 标题:纽约街头流浪男子确认是复旦校友, 热度:3603283
排名:15, 标题:#谁捧红了哈尔滨#, 热度:3522452
排名:16, 标题:南阳回应公务员兼职日薪三千, 热度:3407216
排名:17, 标题:范志毅谈出演繁花:太太劝我去的, 热度:3378420
排名:18, 标题:王晶:我蛮羡慕王家卫, 热度:3247396
排名:19, 标题:男子大闹航班 300人改签背后, 热度:3146276
排名:20, 标题:大妈扮学生行乞 一报警她就逃, 热度:3023458
排名:21, 标题:上海的哥称培养出4个985, 热度:2969560
排名:22, 标题:尔滨上线“冰马俑”, 热度:2846465
排名:23, 标题:地球进入震动模式了吗, 热度:2780118
排名:24, 标题:直升机载小金豆俯瞰冰雪大世界, 热度:2607906
排名:25, 标题:#南方小土豆是玩梗还是冒犯#, 热度:2596402
排名:26, 标题:昆凌方辟谣周杰伦出轨, 热度:2470628
排名:27, 标题:超8千万人直播间看砂糖橘游学, 热度:2317250
排名:28, 标题:韩国游客在美国关岛遭枪击身亡, 热度:2236456
排名:29, 标题:贵阳一马路上夜间有多人爬行, 热度:2188887
排名:30, 标题:小杨哥徒弟复播销售额近千万, 热度:2058963
排名:31, 标题:小砂糖橘被警察蜀黍疯狂宠爱, 热度:1927316
排名:32, 标题:库里致命失误, 热度:1848020
排名:33, 标题:日本地震失联人数增至242人, 热度:1711313
排名:34, 标题:哈尔滨冻梨不光摆盘还雕出来了, 热度:1688723
排名:35, 标题:女子称70多岁爷爷老来得子, 热度:1559144
排名:36, 标题:各地消防都开始邀请小砂糖橘了, 热度:1415900
排名:37, 标题:孟羽童再发声:不会纠结公众评价, 热度:1357436
排名:38, 标题:消防员人手一个“砂糖橘”, 热度:1256425
排名:39, 标题:小米终极辟谣, 热度:1191410
排名:40, 标题:格力回应玫瑰空调被吐槽又土又贵, 热度:1021315
排名:41, 标题:民警等菜时扫视一圈揪出俩逃犯, 热度:989471
排名:42, 标题:85后大叔卖奶茶身家150亿, 热度:865987
排名:43, 标题:富二代继承过亿家产:被骗家里欠钱, 热度:742893
排名:44, 标题:小砂糖橘收到新疆文旅邀请, 热度:615347
排名:45, 标题:马尔代夫总统穆伊兹将访华, 热度:553938
排名:46, 标题:广西北海海域地震 涠洲岛震感明显, 热度:417536
排名:47, 标题:退钱哥:杜兆才陈戌源老了不少, 热度:315269
排名:48, 标题:阿根廷用辐射给蚊子做绝育, 热度:241556
排名:49, 标题:多多买菜关闭本地生活项目, 热度:155253
排名:50, 标题:椰树回应日历被指低俗:不对外卖, 热度:100000