程序运行的截图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GimpWjCB-1639531088565)(程序运行截图.png)]
当时微博热搜的截图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lDXRgrxa-1639531088568)(微博热搜截图.png)]
对应的CSV截图为:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tVtxici8-1639531088570)(csv截图.png)]
我再CSV中存取了他此时热搜榜的全部信息与当时的热度。
原理如下:
① 首先获取当前的时间
② 然后获取微博的URL
③ 根据网页上的源代码手动构造参数
④ 发送请求获取相应对象
⑤ 将获取到的数据保存到CSV中
代码如下:
import requests
from lxml import etree
import time
import csv
def gettime():
# 获取当前的时间
print("当前的时间是:", time.strftime("%Y-%m-%d %H:%M:%S"))
pass
def save(name, hot):
lsname = []
for i in range(0, len(name)):
lsname.append([name[i], hot[i]])
with open("hot.csv", "w", encoding='utf-8') as csvfile:
writer = csv.writer(csvfile)
writer.writerows(lsname)
if __name__ == "__main__":
gettime()
# 确认目标的 url
_url = "https://s.weibo.com/top/summary"
# 手动构造请求的参数
_headers = {
'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.93 Safari/537.36 Edg/96.0.1054.53",
"cookie" : "SINAGLOBAL=5701031797732.083.1638971150198; SUB=_2AkMW7DFkf8NxqwFRmP0QzGvkaIR1zgnEieKgsMC_JRMxHRl-yT9jqhErtRB6PWwfi8IMi4nS63fCLKIwRiYKqexEzF_Q; SUBP=0033WrSXqPxfM72-Ws9jqgMF55529P9D9WFPkNiIHiOqUjBBn8.B.qFu; _s_tentry=cn.bing.com; Apache=9978275422977.867.1639488984604; UOR=,,cn.bing.com; ULV=1639488984639:4:4:1:9978275422977.867.1639488984604:1639061325022",
# "Referer": "https://www.baidu.com/link?url=j4BATujs6r1tDJgq8AqwTKYFP94_YcXPDXrDW9XKN2wmO0CyWck18MN0ES1bM5gX&wd=&eqid=fdbaa254000e24100000000261b05229"
}
# 发送请求
_response = requests.get(_url, headers = _headers)
_data = _response.text
# print(data_)
# 提取数据
html_obj = etree.HTML(_data)
# 置顶微博: 1.名称 2.url 链接
name_top = html_obj.xpath('//*[@id="pl_top_realtimehot"]/table/tbody/tr[1]/td[2]/a/text()')[0]
url_top = html_obj.xpath('//*[@id="pl_top_realtimehot"]/table/tbody/tr[1]/td[2]/a/@href')[0]
url_top = "https://s.weibo.com/" + url_top
print(f'置顶微博:{name_top},链接地址:{url_top}')
# 热搜榜微博:1.名称 2.序号 3.热度
# 热搜榜名称
name_list = html_obj.xpath('//td/span/preceding-sibling::a/text()')
print(len(name_list))
print(name_list)
# 热搜榜热度
hot_list = html_obj.xpath('//td/span/text()')
print(len(hot_list))
print(hot_list)
# 保存在CSV中
save(name_list, hot_list)
print(len(hot_list))
print(hot_list)
# 保存在CSV中
save(name_list, hot_list)