Anome 发表于 2023-4-25 10:56

新手写的简单的python获取微博热搜的脚本

新人第一次发帖,怪紧张的。关注52pj很久了,哈哈,以前都是在这里找大家分享的工具,前段时间学了爬虫,但是一直觉得比较简单,就没发,突然心血来潮想分享下自己写的获取微博热搜的脚本,本来是因为找微博热搜的RSS找不到,就打算自己爬一下,后来还得自己手动运行,就没怎么用过。大家如果有微博热搜的RSS分享一下哈。感谢。
> 使用了csv包和requests包,填写自己的cookies后直接运行就行。
> 获取到的文件会保存在同目录下的'weibo_hot.csv'文件里,csv格式保存的。
> 获取的结果有4列,分别是id(获取时的热搜排名),note(热搜标题),category(类型),raw_hot(热度),url(链接)
> 上传的附件后缀是txt,需要改成py才能用

```python
import csv
import requests

url = "https://weibo.com/ajax/statuses/hot_band"
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 Edg/111.0.1661.62',
    'Referer': 'https://weibo.com/newlogin?tabtype=search&gid=&openLoginLayer=1&url=https://s.weibo.com/realtime?q=%E4%B8%BAi%E5%81%9Ae&rd=realtime&tw=realtime&Refer=weibo_realtime',
    'Cookie': ''
} # 在单引号里填写你自己的Cookie就可以了
response = requests.get(url, headers=headers)
response = response.json()["data"]["band_list"]
hot = []
count = 0
for dict1 in response:
    count += 1
    if 'note' in dict1:
      note = dict1['note']
    else:
      note = 'Unknown'
    if 'category' in dict1:
      category = dict1['category']
    else:
      category = 'Unknown'
    if 'raw_hot' in dict1:
      raw_hot = dict1['raw_hot']
    else:
      raw_hot = 'Unknown'
    hot_url = f'https://s.weibo.com/weibo?q={note}&Refer=index'
    lst =
    hot.append(lst)

with open('weibo_hot.csv', 'w', newline='', encoding="utf-8") as file:
    writer = csv.writer(file)
    writer.writerow(["id", "note", "category", "raw_hot", "url"])
    # 遍历列表中的每个元素,写入 CSV 文件的单独一行中
    for item in hot:
      writer.writerow(item, )

```

Anome 发表于 2023-5-12 14:51

曾经的歌42 发表于 2023-5-12 14:18
request.get(url)   括号里面也要加headers么。。

不用了的,response = requests.get(url, headers=headers)
代码里已经写上了,只需要在这一行的前面哪个,headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 Edg/111.0.1661.62',
    'Referer': 'https://weibo.com/newlogin?tabtype=search&gid=&openLoginLayer=1&url=https://s.weibo.com/realtime?q=%E4%B8%BAi%E5%81%9Ae&rd=realtime&tw=realtime&Refer=weibo_realtime',
    'Cookie': ''
}
在最后面这个Cookie的单引号里面填上自己cookie就好了。

如果是自己写的爬虫,先不填试试能不能爬到结果,不能的话就需要添加header了,就想我这个脚本里的一样,就需要在request.get(url,headers)都添加了

yinfu123 发表于 2023-4-26 14:45

_T_WM=86637299753; XSRF-TOKEN=1b2636; WEIBOCN_FROM=1110005031; MLOGIN=1; mweibo_short_token=9b71794a9f; SCF=AnGo8PBecuWfX5jnDKrHmoWpUriVG1zPOWqhoqgWjhM16bIkOhuUTwAkF8EczckE1dG_aA4r9OFhZEDzGwxpr8g.; SUB=_2A25JTLXkDeRhGeBL61YT8SjKyzSIHXVqztusrDV6PUJbktCOLVDwkW1NR0glr3wtry3LOyviZYUiePOqoYPuAWkG; SUBP=0033WrSXqPxfM725Ws9jqgMF55529P9D9WFY7vUVI4N0vgZfG3XI7U215JpX5K-hUgL.FoqfehBEeKqcehn2dJLoI0YLxKqL1K.LB-qLxKnLBKML1hzLxK.LBo2LB.eLxKqLBo2LBK5LxKnLB.qL1hMLxKqLB.zLBKBLxK-L1K.LBKnt; SSOLoginState=1682490805; ALF=1685082805; M_WEIBOCN_PARAMS=luicode%3D20000174%26uicode%3D20000174
cookie是类似上面这个吗?填进去没反应

Anome 发表于 2023-4-26 17:01

yinfu123 发表于 2023-4-26 14:45
_T_WM=86637299753; XSRF-TOKEN=1b2636; WEIBOCN_FROM=1110005031; MLOGIN=1; mweibo_short_token=9b71794a ...

我是这样的,进入微博后,点”热搜榜“这个选项,然后F12进入开发者模式,重新刷新一下,上面那栏选择Network选项,然后找到hot_band这个,选择requests Headers下面的cookies直接右键单击,然后复制value。注意不是上面的response Headers。你看图片中,标出来了

Anome 发表于 2023-4-26 17:06

yinfu123 发表于 2023-4-26 14:45
_T_WM=86637299753; XSRF-TOKEN=1b2636; WEIBOCN_FROM=1110005031; MLOGIN=1; mweibo_short_token=9b71794a ...

你填了后运行了会报错吗?运行结束后不会有提示的,会直接在同目录生成一个文件,里面就是热搜

yinfu123 发表于 2023-4-26 18:14

Anome 发表于 2023-4-26 17:06
你填了后运行了会报错吗?运行结束后不会有提示的,会直接在同目录生成一个文件,里面就是热搜

明天再试一下,谢谢

Anome 发表于 2023-4-26 18:42

yinfu123 发表于 2023-4-26 18:14
明天再试一下,谢谢

嗯嗯,没事的

gly198752 发表于 2023-4-27 08:50

厉害厉害 值得学习下

lingwushexi 发表于 2023-4-27 09:12

厉害,学习下{:1_921:}

amtf0614 发表于 2023-4-27 11:20

刚去运行了下 ,直接粘贴运行 生产了csv文件

yty0123 发表于 2023-4-27 11:36

我要开始学习了,嘎嘎嘎
页: [1] 2
查看完整版本: 新手写的简单的python获取微博热搜的脚本