当前位置: 首页 > 后端技术 > Python

Python超简单爬取微博热搜榜数据

时间:2023-03-25 23:02:53 Python

微博热搜榜对于研究大众的流量有很大的价值。今天的教程就说说如何爬取微博热搜榜。热搜榜的链接是:https://s.weibo.com/top/summary/用浏览器浏览,发现不用登录也可以正常查看,就简单多了。使用开发者工具(F12)查看页面逻辑,获取各个热搜的CSS位置。方法如下:根据该方法,获取td标签的selector为:pl_top_realtimehot>table>tbody>tr:nth-child(3)>td.td-02其中nth-child(3)指的是第三个tr标签,因为这个热搜在第三个位置,但是我们要爬的都是热搜,所以:nth-??child(3)可以去掉。还需要注意的是pl_top_realtimehot是标签的id。需要在id前加#,最后变成:#pl_top_realtimehot>table>tbody>tr>td.td-02可以自定义你要爬的信息,这里我需要的信息是:链接和标题热搜,以及热搜的热度。对应的CSS选择器是:链接和标题:#pl_top_realtimehot>table>tbody>tr>td.td-02>a流行度:#pl_top_realtimehot>table>tbody>tr>td.td-02>span值得注意的链接和标题在同一个地方。链接在a标签的href属性中,标题在a的文本中。有一种方法可以用beautifulsoup获得两者。请看下面的代码。既然我们知道这些信息在哪里,我们就可以开始编写程序了。默认情况下,你已经安装了python,可以使用cmd的pip。如果没有,请参考本教程:python安装。需要用到的python包有:BeautifulSoup4:cmd/Terminal安装说明:pipinstallbeautifulsoup4lxmlParser:cmd/Terminal安装说明:pipinstalllxmllxml是python中的一个包,这个包包含了将html文本转换为xml对象的工具,允许我们定位标签的位置。可以用来识别这些标签在xml对象中位置的包是Beautifulsoup4。写代码:#https://s.weibo.com/top/summary/importrequestsfrombs4importBeautifulSoupif__name__=="__main__":news=[]#新建一个数组存放热搜榜hot_url='https://s.weibo.com/top/summary/'#热搜链接r=requests.get(hot_url)#向链接发送get请求获取页面soup=BeautifulSoup(r.text,'lxml')#解析页面urls_titles=soup.select('#pl_top_realtimehot>table>tbody>tr>td.td-02>a')hotness=soup.select('#pl_top_realtimehot>table>tbody>tr>td.td-02>span')foriinrange(len(urls_titles)-1):hot_news={}#保存信息到字典中hot_news['title']=urls_titles[i+1].get_text()#get_text()获取标签的文本hot_news['url']="https://s.weibo.com"+urls_titles[i]['href']#['href']获取标签链接,并补全前缀hot_news['hotness']=hotness[i].get_text()#获取热度文本news.append(hot_news)#添加字典到数组print(news)代码说明,请看评论,但是这样做,我们只是平局结果保存在一个数组中,如下图,但是不便于观看,所以下面我们将其保存为csv文件python热搜榜爬虫importdatetimetoday=datetime.date.today()f=open('./hotsearchlist-%s.csv'%(today),'w',encoding='utf-8')foriinnews:f.write(i['title']+','+i['url']+','+i['hotness']+'n')效果如下,是怎么回事,是不是很美很多:Python微博热搜爬虫完整代码如下:#https://s.weibo.com/top/summary/importrequestsfrombs4importBeautifulSoupif__name__=="__main__":news=[]#新建一个数组存放热搜列表hot_url='https://s.weibo.com/top/summary/'#热搜链接r=requests.get(hot_url)#发送get请求到链接获取页面soup=BeautifulSoup(r.text,'lxml')#解析页面urls_titles=soup.select('#pl_top_realtimehot>table>tbody>tr>td.td-02>a')hotness=soup.select('#pl_top_realtimehot>table>tbody>tr>td.td-02>span')foriinrange(len(urls_titles)-1):hot_news={}#保存字典中的信息hot_news['title']=urls_titles[i+1].get_text()#get_text()获取某个标签的文本hot_news['url']="https://s.weibo.com"+urls_titles[i]['href']#['href']获取标签的链接,并补全前缀hot_news['hotness']=hotness[i].get_text()#获取热点文本news.append(hot_news)#将字典添加到数组中print(news)importdatetimetoday=datetime.date.today()f=open('./HotSearchList-%s.csv'%(today),'w',encoding='utf-8')foriinnews:f.write(i['title']+','+i['url']+','+i['hotness']+'n')Python实战宝典(pythondict.com)不只是一本书,欢迎关注公众号:Python实战宝典原文来自Python实战宝典:Python微博热搜