python爬虫微博24小时热搜_Python爬虫之微博热搜

本文介绍了作者使用Python爬虫抓取微博24小时热搜的步骤,包括观察网页结构,利用requests和lxml库解析HTML,通过XPath定位数据,并通过zip函数打包输出热搜的排名、内容、热度值和链接。最后讨论了使用chr(12288)调整输出对齐的问题。
摘要由CSDN通过智能技术生成

最近自学了Python爬虫,手痒痒,想爬点东西,所以就有了这篇文章。由于目前本人技术有限,如有纰漏,欢迎批评指正;如有良策,也欢迎赐教。

思路

1.首先,当然是打开微博热搜,F12观察下网页结构。令人高心的是,微博热搜的网页结构比较简单,所有的热搜数据是都在放在表格中,除了置顶的热搜(只有热搜内容和链接,没有热搜排名和热度值),其他的热搜都是相同的格式(热搜排名、热搜内容、热度值、链接)

可以获取到热搜排名 可以获取到热搜内容、热搜链接、热度值

2.先输出比较特殊的置顶内容,然后剩下的就是50个格式相同的内容,因为通过xpath获取的值是list类型,所以可以用list[起点:重点]来截取置顶内容个后50个内容。

3.xpath抓取的50个内容都是按顺序一一对应的相关内容,所以使用zip函数将相关内容为一组打包,并在打包的过程中输出。

代码

import requests

from lxml import etree

# 微博热搜url

url = "https://s.weibo.com/top/summary?cate=realtimehot"

# 获取网页源码

r = requests.get(url).text

# 调用HTML类对HTML文本进行初始化,成功构造XPath解析对象,同时可以自动修正HMTL文本(标签缺少闭合自动添加上)

result = etree.HTML(r)

# 通过td标签的class值定位,text()获取被td标签包围的值

# 因为置顶的热搜没有排名,所以hot_rank获取的值个数就是50个

hot_rank = result.xpath("//td[@class='td-01 ranktop']/text()")

# 获取所有热搜内容

# 因为置顶的热搜有热搜内容,所以hot_content_all获取的值个数就是51个

hot_content_all = result.xpath("//td[@class='td-02']/a/text()")

# 截取置顶热搜内容

hot_content_first = hot_content_all[0:1]

# 截取除去置顶的热搜内容

hot_content = hot_content_all[1:]

# 获取热度值

# 因为置顶的热搜没有热度值,所以hot_rank获取的值个数就是50个

hot_index = result.xpath("//td[@class='td-02']/span/text()")

# 获取所有内容url

# 因为置顶的热搜有url,所以hot_url_all获取的值个数就是51个

hot_url_all = result.xpath("//td[@class='td-02']/a/@href")

# 截取置顶url

hot_url_first = hot_url_all[0:1]

# 截取除去置顶的url

hot_url = hot_url_all[1:]

# 输出置顶的热搜

for hot_content_first1, hot_url_first1 in zip(hot_content_first, hot_url_first):

print("{:<5}".format("置顶") + "{:<20}\t".format(hot_content_first1, chr(12288)) + "{:

# 输出除去置顶的热搜

for hot_rank1, hot_content1, hot_url1, hot_index1 in zip(hot_rank, hot_content, hot_url, hot_index):

print("{:<5}".format(hot_rank1) + "{:<20}\t".format(hot_content1, chr(12288)) + "{:<8}".format(hot_index1) + "{:

chr(12288)有什么用处?

chr(12288)是中文的空格,因为中英文所占据的空间是不一样大的,所以在输出的时候即使控制了输出的宽度,还是会不对齐,使用的chr(12288)的目的是让输出的内容相对的对齐,即使效果也不太好,但是聊胜于无。

效果

TIM%E6%88%AA%E5%9B%BE20190308192543-1024x752.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值