首页 > 编程语言 >Python爬虫:微博热搜榜前200条评论

Python爬虫:微博热搜榜前200条评论

时间:2022-08-22 09:44:23浏览次数:59  
标签:200 uid Python writer tr mid re 搜榜前 csv

整体思路:

 1、从热搜榜获取详情页的链接

 

   

2、排除掉广告以及置顶 广告热力值为空 置定为第一个tr

 

 

3、点击加载更多评论页面会跳转

 

 

 

 

4、跳转页面后抓包获得评论所在真实地址

 

 

5、观察真实地址所需要的参数 从详情页获取 完成构造

 

 

6、对构造地址进行请求将count=20改为count=200 可以显示二百条

7、使用re对数据进行提取并保存

8、仅供学习使用

 1 import re
 2 import csv
 3 import requests
 4 from lxml import etree
 5  
 6 url = 'https://s.weibo.com/top/summary?sudaref=www.baidu.com'
 7 headers = {
 8     '你的': 'cookie',
 9     'referer': 'https://login.sina.com.cn/',
10     'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36',
11  
12 }
13 with open('微博热搜评论.csv', 'a', encoding='utf-8-sig', newline='') as f:
14     csv_writer = csv.writer(f)
15     csv_writer.writerow(['标题', '评论名称', '所在地区', '评论内容'])
16  
17 resp = requests.get(url=url, headers=headers)
18 tree = etree.HTML(resp.text)
19 # 第一个不在热搜范围内
20 tr_list = tree.xpath('//*[@id="pl_top_realtimehot"]/table/tbody/tr')[1:]
21 # print(tr_list)
22 for tr in tr_list:
23     # 判断是不是广告 广告后面没有热力值 如果为空就为广告
24     if tr.xpath('./td[2]/span') != '':
25         href = tr.xpath('./td[2]/a/@href')[0]
26         # void 我也不知道是啥 反正不是正常热搜链接 直接排除掉
27         if 'void' not in href:
28             # 在此或得到详情页链接
29             title = tr.xpath('./td[2]/a/text()')[0]
30             wanzheng = 'https://s.weibo.com/'+href
31             xiangqing_resp = requests.get(url=wanzheng, headers=headers).text
32             uid_obj = re.compile(r'uid=(?P<uid>.*?)&')
33             uid = uid_obj.search(xiangqing_resp).group('uid')
34             # print(uid)
35             mid_obj = re.compile(r'mid="(?P<mid>.*?)" >')
36             mid = mid_obj.search(xiangqing_resp).group('mid')
37             # print(mid)
38             pinglun_200url = f'https://weibo.com/ajax/statuses/buildComments?is_reload=1&id={mid}&is_show_bulletin=2&is_mix=0&count=200&uid={uid}'
39             # print(pinglun_200url)
40             neirong = requests.get(url=pinglun_200url)
41             neirong_obj = re.compile(r'"source":"(.*?)",.*?"screen_name":"(.*?)","profile_image_url":.*?"text_raw":"(.*?)"}', re.S)
42             tiqu = neirong_obj.findall(neirong.text)
43             for i in tiqu:
44                 diqu = i[0]
45                 name = i[1]
46                 neirong = i[2]
47                 with open('微博热搜评论.csv', 'a', encoding='utf-8-sig', newline='') as f:
48                     csv_writer = csv.writer(f)
49                     csv_writer.writerow([title,name, diqu, neirong])
50                 print( title+'保存完成')

 

标签:200,uid,Python,writer,tr,mid,re,搜榜前,csv
From: https://www.cnblogs.com/Gil-1117/p/16611776.html

相关文章

  • 第四讲 Python中的常见语句
    4.1 if条件判断语句4.1.1 if条件判断语句单分支◆单分支格式:if判断条件:语句块1……else:语句块2……Ø例:name=input('请输入您的用户名:')ifname=='admin':......
  • python简单操作redis
    redis操作importredisr=redis.StrictRedis(host='localhost',port=6379,db=0)r.set('test1','test1')value1=r.get('car')print(value1)all_keys=r.ke......
  • 1041 [SCOI2005]繁忙的都市 kruskal 最小生成树
     链接:https://ac.nowcoder.com/acm/contest/26077/1041来源:牛客网题目描述城市C是一个非常繁忙的大都市,城市中的道路十分的拥挤,于是市长决......
  • 8/21 python基础学习4
    第九章类类的创建:classDog:def__init__(self,name,age):#初始化函数self.name=nameself.age=agedefsit(self):pri......
  • Python数据库编程
    1.操作SQLite3数据库  Python3.x版本开始,在标准库中已经内置了SQLlite3模块,它可以支持SQLite3数据库的访问和相关的数据库操作。在需要操作SQLite3数据库数据时,只须在......
  • python: 绘制数学函数
    1importmatplotlib.pyplotasplt2importnumpyasnp34#100linearlyspacednumbers5x=np.linspace(-5,5,100)67#thefunction,whichisy=......
  • 系统学Python(四)字符串
    今天我们来学习字符串。python中的字符串字面量由单引号或双引号括起。str1='hello'str2="hello"#两种写法效果一样print(str1)print(str2)print(type(str1),t......
  • Python_08While循环
    while循环Python提供了While和for循环,(在Python中没有do..while循环)如果使用 while 循环,给定的判断条件为true时执循环体,否则退出循环体。1#在Python中没有do...whi......
  • Python-09函数基础、形参、实参
    Python3函数函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print......
  • 4. [2001年NOIP普及组] 最大公约数和最小公倍数问题
    题目链接(码学堂,数据弱)题目链接(洛谷,数据极强)摘要:1.P,Q是正整数(unsigned)2.要求P,Q以x0为最大公约数,以y0为最小公倍数.试求:满足条件的所有可能的两个正整数的个数. ......