实现百度搜索实时热点爬虫


本教程实现简单的百度榜单实时热点爬虫,爬取百度实时热点。

热榜示例
实现的思路是:首先爬取热榜页面内容,其次是解析热榜页面的内容,最终到获取到需要的内容。
在展示代码之前,我们先介绍代码中使用到的一些python库

相关技术介绍

Request库

Requests(https://github.com/psf/requests)库由Kenneth Reitz创建,支持Python 2.6-2.7, 3.3-3.7。Requests库可以实现HTTP协议中的GET、OPTIONS、HEAD、POST、PUT、PATCH、DELETE方法,还可以实现HTTPS代理,流下载,文件分块上传等。且Requests的参数设置采用Key/Value键值对的方式进行设置。我们在代码中使用Requests库用来构建HTTP请求获取页面。
安装Requests库时,如果安装了pip之后,直接执行命令:pip install requests即可安装Requests库。

Beautiful Soup库

Beautiful Soup(https://www.crummy.com/software/BeautifulSoup/)是一个可以从HTML或XML文件中提取数据的Python库。目前使用的是Beautful Soup 4。使用时,将一个HTML或XML文档传入Beautiful Soup,将得到一个bs4的对象,Beautiful Soup将传入的文档转换成一个树形对象。Beautiful Soup可以对文档树进行遍历、查找和修改。
安装Beautiful Soup库时,如果安装了pip之后,直接执行命令:pip install beautifulsoup4 即可安装Beautiful Soup库。
这里需要了解TAG的含义。TAG是HTML中的一个标签。如下所示:

<a class='cls' href='www.example.com'>Hello world</a>

a就是一个tag,“href”和“class”均为a的属性。获取a的href的属性,采用a.href即可获取属性值。

代码实现

代码实现如下:

'''
爬取百度实时热点排行榜
'''

import requests
from bs4 import BeautifulSoup

headers = {'User-Agent': 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:84.0) Gecko/20100101 Firefox/84.0',
           'Connection': 'keep - alive'}

url = 'http://top.baidu.com/buzz?b=1'

request = requests.get(url, headers)
# 修改为gb18030编码
request.encoding = 'gb18030'
soup = BeautifulSoup(request.text, 'lxml')
items_body = soup.find(class_='list-table')
tr_soup = items_body.find_all('tr')
num = 1
for i in tr_soup:
    content = i.find(class_='list-title')
    if content != None:
        # 输出编号及热搜内容
        print('{0:2d}.{1}'.format(num, content.get_text()))
        # 热点链接
        link = content.get('href')

代码分析

现对上述代码做简单的分析。

requests.get(url, headers)

使用Requests库的get方法构建HTTP的GET请求。url是百度热榜地址。headers中的内容,均以Key/Value键值对方式构建。这里主要构建“User-Agent”。本示例中使用和讲解中使用的浏览器是火狐浏览器。打开浏览器中的“工具”->“Web 开发者”->“Web 控制台”。随便打开一个网页,查看“Web 控制台”上的“网络”->“消息头”->“请求头”中的“User-Agent”,将“User-Agent”内容复制到代码中。
查看User-Agent

request.encoding = 'gb18030'

对获取到的request文档树采用“gb18030”的编码格式。
GB 18030GB 2312GBK 兼容,是最新国家标准 GB 18030-2005《信息技术中文编码字符集》,收录有汉字七万多个。

soup = BeautifulSoup(request.text, 'lxml')

这里采用效率更高的“lxml”解析器来解析HTML文档。
使用浏览器打开百度热榜链接,在“Web 控制台”下,使用“查看器”定位到百度热榜关键字内容处理。
关键字内容

在“查看器”中,所有的热榜内容均是包含在一个“table”中。
list-table内容
为了取得每个热点的内容,只需要遍历这个“table”,即可取得热点的关键字。

items_body = soup.find(class_='list-table')

在Beautiful Soup中,搜索tag的方法有find_all() 和find() ,其中find_all() 方法搜索所有的tag,并返回所有满足要求的tag,而find() 方法则返回第一个查找到的tag。关于find() 及 find_all() 的详细用法,读者可以查看Beautiful Soup的相关文档。
在“table”下的tag,只有属性是“list-title”的tag才具有有效的内容。于是需要对名称为“tr”的tag进行过滤。

tr_soup = items_body.find_all('tr')
for i in tr_soup:
    content = i.find(class_='list-title')

这样就可以搜索到满足要求的tag。

content.get_text()

对于热点内容的关键字,只需要使用get_text()方法即可获得。

# 热点链接
link = content.get('href')

热点链接即可通过get(‘href’)来获得该属性值。
代码执行结果如下所示:
执行结果

项目延伸讨论

上述代码实现比较简单。可以在该项目基础上,做一些扩展,比如定时爬取热榜信息,保存到数据库中,在一周或一个月内,可以对爬取的数据进行分析,得到搜索的热点词等内容。也可以做成一个公众号爬虫机器人,每天定时将热榜信息推送给关注公众号的用户等。

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值