总结:Python数据采集案例(1):微博热搜榜采集
优采云 发布时间: 2020-08-31 13:03Python数据采集案例(1): 微博热点搜索列表采集
实现目标
本案例通过图片和文字详细介绍了网络请求和分析的方法. 实现该目标的要求是通过网络请求获取微博热搜索列表中的前50个热搜索关键字,并将结果打印到控制台中.
实现过程
通常,数据采集采集器的实现过程包括以下步骤:
接下来,我们按照上述步骤一步一步完成.
确定数据所在的网址
打开微博热点搜索列表,即网址为:
首先,我们需要确定目标数据是存在于页面上还是通过Ajax加载. 我们可以在浏览器中右键单击(建议使用Chrome浏览器),然后选择“查看网页源代码”.
这时,浏览器将打开一个新页面,并将视图源部分添加到Url(网页地址)之前,并且该网页中显示的关键字是当前网页的源代码.
我们使用快捷键Ctrl + F打开搜索框,并在网页的源代码中搜索显示在顶部搜索页面上的文本. 例如,搜索排名最高的“在神仙桥上发现的北宋古墓”,您可以找到网页的源代码中存在关键字,这意味着热门搜索列表直接加载到页面上,而不是通过Ajax. 目前,我们只需要直接请求网页的URL即可获取热门搜索列表数据.
网页请求
下面,我们使用请求模块执行网页请求并打印请求结果. 代码如下:
import requests
if __name__ == "__main__":
response = requests.get("https://s.weibo.com/top/summary")
print(response.content.decode())
在印刷的内容中,我们通过搜索再次发现了“北宋发现的穿越神仙桥的古墓”,这表明我们的请求成功获得了热门搜索数据,没有任何问题.
网页分析
再次返回浏览器,右键单击并选择“检查”以打开浏览器控制台(或直接使用快捷键F12打开控制台).
选择元素选择工具.
在元素选择模式下(元素选择工具的小箭头为蓝色),单击我们需要采集的信息.
这时,浏览器控制台将找到目标信息所在的标签.
我们右键单击标签,选择“复制”,然后选择“复制选择器”以复制标签的CSS选择器路径. 该路径用于定位当前标签. 例如,第一个热搜索关键字所在的标签的CSS选择器为:
#pl_top_realtimehot > table > tbody > tr:nth-child(2) > td.td-02 > a
#pl_top_realtimehot表示ID为pl_top_realtimehot的标签,即下图第一行中的div标签;> table表示当前标签的下一层的表标签,即下图的第二行; tr: nth -child(2)表示当前标签下的第二个tr标签,即下图中选择的tr标签.
通过观察网络结构,我们可以发现每个热搜索在tbody标签下面是一个独立的tr标签;因此,要同时获得不同的热门搜索关键字,我们只需要不再限制指定的tr即可. 只需删除标签,即删除tr: nth-child(2)中的: nth-child(2)即可. CSS选择器路径.
#pl_top_realtimehot > table > tbody > tr > td.td-02 > a
在浏览器控制台的“元素”选项卡中,使用Ctrl + F快捷键打开搜索框,然后在搜索框中搜索修改后的CSS选择器路径. 可获得51个结果,表明可以同时使用修改后的CSS选择器. 匹配所有热门搜索关键字.
下面,我们使用Python的第三方模块-BeautifulSoup模块(pip install命令: pip install BeautifulSoup4)实施分析,其中包括以下请求代码:
import requests
from bs4 import BeautifulSoup
if __name__ == "__main__":
response = requests.get("https://s.weibo.com/top/summary")
bs = BeautifulSoup(response.content.decode(), 'lxml')
for keyword_label in bs.select("#pl_top_realtimehot > table > tbody > tr > td.td-02 > a"):
print(keyword_label.text)
运行结果已经可以将所有热门搜索打印到控制台,从而实现当前需求.
10个关键词把握2020中国经济走势
北宋古墓发现过仙桥
香港各界发起联署支持国家安全立法
马路惊现非洲雄狮
澳门所有大中小学升国旗唱国歌全覆盖
......
这一系列案例采集中的所有数据只能用于学习和研究目的!
案例要求说明: 因此,微博热点搜索列表是实时更新的,因此相对完整的采集要求如下: 每3分钟采集一次微博热点搜索列表中排名前49位的热门搜索(忽略广告第3条中的信息),并将结果存储在数据库中. 该数据库至少应收录采集时间,等级(等级),关键字(关键字),受欢迎程度(热门),类型(类型)和其他字段. 完整的案例将在后续内容中进行解释.
案例说明的解释: 作为第一个案例,本文通过图片和文字详细解释了每个步骤,随后的案例将集中在思想上.
扩展链接是Github项目链接.