分享好友 最新动态首页 最新动态分类 切换频道
Python微博爬虫,批量获取指定账号数据
2024-12-26 07:50
import requests from bs4 import BeautifulSoup import pandas as pd from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.common.by import By import time from datetime import datetime import re # 配置WebDriver的路径(确保chromedriver的路径正确) chrome_driver_path = 'C:/Users/Administrator/Downloads/Compressed/chromedriver_win32/chromedriver.exe' # 1.使用自己的微博账号模拟登录微博:有验证码时请手动点击验证,有二维码时请扫描 def login(username, password): service = Service(chrome_driver_path) driver = webdriver.Chrome(service=service) driver.maximize_window() # 导航到目标网页 driver.get('https://weibo.com') # 等待页面加载完成(根据需要调整等待时间) time.sleep(15) # 点击立即登录按钮 login_button = driver.find_element(By.XPATH,"//*[@id='__sidebar']/div/div[2]/div[1]/div/button") login_button.click() # 等待页面加载完成(根据需要调整等待时间) time.sleep(2) driver.switch_to.window(driver.window_handles[-1]) # 会弹出登录框 # 点击账号登录页签 driver.find_element(By.XPATH,"//*[@id='app']/div/div/div[2]/div[2]/ul/li[2]/a").click() # 输入用户名和密码 driver.find_element(By.XPATH, '//*[@id="app"]/div/div/div[2]/div[2]/form/div[1]/input').send_keys(username) driver.find_element(By.XPATH, '//*[@id="app"]/div/div/div[2]/div[2]/form/div[2]/input').send_keys(password) # 点击登录按钮 driver.find_element(By.XPATH, '//*[@id="app"]/div/div/div[2]/div[2]/button').click() # 等待页面加载完成(根据需要调整等待时间) time.sleep(20) # 2.登录之后,爬取微博内容 uid = '6282329711' # 用户id,在调试器获取https://weibo.com/ajax/statuses/mymblog?uid=6282329711&page=1&feature=0 full_content_url_template = 'https://weibo.com/ajax/statuses/longtext?id={}' # 爬取需要点击展开的内容模板url url = 'https://weibo.com/ajax/statuses/mymblog?uid={}&page={}&feature=0' # 微博爬取一页内容模板url referer_url = 'https://weibo.com/u/{}' # 关联url # 需要登录后,从调试器获取 cookie = 'UOR=www.paperyy.com,service.weibo.com,www.paperyy.com; SINAGLOBAL=9732409442892.457.1685464393254; ULV=1716132809564:2:2:1:4208533399564.4937.1716132809555:1685464393294; XSRF-TOKEN=eYObo3SCebGWa1Qh0KjRJhpk; SUB=_2A25LTwvDDeRhGeBM41AS8ifLyj2IHXVoJQELrDV8PUNbmtANLVfskW9NRLDE4T7-ix-_0UDTlmMmTfpLSErD9P7D; SUBP=0033WrSXqPxfM725Ws9jqgMF55529P9D9WFbwUE27mTLonPIWJBKMPAR5JpX5KzhUgL.FoqE1hz0eo.NeK22dJLoIEXLxK-LBo5L12qLxKML12eLB-zLxKML1hnLBo2LxKMLB.eL1KqLxKMLBKnL12zt; ALF=02_1718814867; WBPSESS=Dt2hbAUaXfkVprjyrAZT_C-r5K0-gEJyRI6VaswXJvDnYyZUZqulbfZ3htR25AGrSlkEUHpYmh1Gvd7zzn4dRMsmbAxq5I8hMphxpySyYskzFcaidhCiqvoh75BgoHebQjgEUFzIGjBs7ilfB_4zx7zabbYROJG2BJvEHMRLNrEmsL1Ht7ajeqSVt6mybviShFHjkliWEa_wEa7ndBjICg==' token = 'eYObo3SCebGWa1Qh0KjRJhpk' # 需要登录后,从调试器获取 headers = { 'referer': referer_url.format(uid), 'x-requested-with': 'XMLHttpRequest', 'x-xsrf-token': token, 'cookie': cookie, 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36' } def fetch_weibo_data(): content_list = [] time_list = [] source_list = [] attitudes_count_list = [] comments_count_list = [] reposts_count_list = [] num = 1 since_id = '' while True: try: # 访问微博页面 this_url = url.format(uid, num) if (since_id !=''): this_url += '&since_id={}'.format(since_id) print("访问页面:" + this_url) response = requests.get(this_url, headers=headers, timeout=10) response.encoding = 'utf-8' content = response.json() if (content['ok'] == 1): # 解析微博数据 data = content['data'] print('total: ' + str(data['total'])) if (data['total'] == 0): break else: since_id = str(data['since_id']) for item in data['list']: text = item['text'] if ('<span class="expand">展开</span>' in text): text = get_full_content(item['mblogid']) content_list.append(text) time_list.append(format_datetime(item['created_at'])) source_list.append(get_source(item['source'])) attitudes_count_list.append(item['attitudes_count']) comments_count_list.append(item['comments_count']) reposts_count_list.append(item['reposts_count']) num += 1 print('since_id: ' + str(data['since_id'])) visit_rum(this_url) time.sleep(1) else: print("获取微博数据失败,请检查网络连接或微博账号是否正确") except: print("请求超时,正在重试...") time.sleep(2) # 保存微博数据到csv文件 weibodata = { '微博内容': content_list, '时间': time_list, '来源': source_list, '点赞数': attitudes_count_list, '评论数': comments_count_list, '转发数': reposts_count_list } df = pd.DataFrame(weibodata) df.to_excel('weibo_{}_{}.xlsx'.format(uid,time.strftime('%Y-%m-%d %H_%M_%S', time.localtime())), index=False) def visit_rum(url_name): # 访问RUM页面 form_data = { "name":url_name, "entryType":"resource", "responseStatus":200, "serverTiming":[], "dns":0, "tcp":0, "ttfb":433.90000000000873, "pathname":"https://weibo.com/ajax/statuses/mymblog", "speed":0 } while True: try: rum_url = 'https://weibo.com/ajax/log/rum' print("访问页面:" + rum_url) response = requests.post(rum_url, headers=headers, data=form_data, timeout=10) response.encoding = 'utf-8' content = response.json() if (content['ok'] == 1): break except: print("请求超时,正在重试...") time.sleep(2) # 获取微博长文本内容 def get_full_content(id): longcontent = '' while True: try: print("访问页面:" + full_content_url_template.format(id)) response = requests.get(full_content_url_template.format(id), headers=headers, timeout=10) response.encoding = 'utf-8' content = response.json() if (content['ok'] == 1): data = content['data'] longcontent = data['longTextContent'] break except: print("请求超时,正在重试...") time.sleep(2) return longcontent # 格式化微博发布时间 def format_datetime(datetime_str): # 定义输入日期字符串的格式 input_format = "%a %b %d %H:%M:%S %z %Y" # 定义输出日期字符串的格式 output_format = "%Y-%m-%d %H:%M:%S" # 将字符串转换为datetime对象 date_obj = datetime.strptime(datetime_str, input_format) # 将datetime对象转换为指定格式的字符串 formatted_date_str = date_obj.strftime(output_format) return formatted_date_str def get_source(src_text): pattern =r'<a.*?>(.*?)</a>' result = re.findall(pattern, src_text) result_text = '' if(len(result)==0): result_text = src_text else: result_text = result[0]
最新文章
科大讯飞董事长称国内很多模型已对标ChatGPT4
科大讯飞董事长称国内很多模型已对标ChatGPT46月27日,科大讯飞在北京展示了他们的最新成果——讯飞星火大模型V4.0,这款模型在医疗、教育、商业等多个领域均有实际应用,并且依托于名为“飞星一号”的强大国产计算平台进行训练。刘庆峰,
苹果将推新款手机产品 外观大变
苹果将推新款手机产品 外观大变据熟悉苹果公司计划的消息人士透露,苹果公司计划在明后两年推出一款全新的iPhone手机。这款新机的外观与现有机型相比有了较大的改变,售价也将比Pro机型更为亲民。据了解,这款新机将采用简化的摄像系统以降
勇者秘境奥义技能用什么好 勇者秘境奥义技能强度排名
t2627_2_2627_1:4.0t1-t0:33.0t2-t1:7.0t3-t2:0.0t4-t3:2.0t5-t4:14.0t6-t5:18.0t7-t6:3.0t8-t7:0.0t9-t8:15.0t10-t9:0.0t11-t10:8.0t12-t11:0.0t13-t12:0.0t14-t13:0.0t15-t14:1.0t16-t15:0.0t17-t16:0.0t18-t17:40.0t19-t18:12.0t20-t19:
长沙SEO外链代发服务,助力企业网站快速提升搜索引擎排名
长沙SEO外链代发服务,力企业网站优化,有效提升搜索引擎排名,助力企业网络营销。在当今这个的时代,搜索引擎优化(SEO)已经成为企业提升网站流量、扩大品牌影响力的关键手段,而长沙作为我国中部地区的经济中心,越来越多的企业开始关注
Win10电脑怎么设置锁屏?Win10设置锁屏方法教程
我们在使用电脑的时候经常会离开电脑,而在离开电脑的这段时间里为了防止其他用户偷看自己的电脑,就需要把系统屏幕锁屏,那么在Win10电脑中怎么设置锁屏呢?下面小编就带我们在使用电脑的时候经常会离开电脑,而在离开电脑的这段时间里为
智能SEO助力企业营销,开启新时代潮流
智能SEO推广,运用先进技术优化企业网站,提升搜索引擎排名,助力品牌迅速占领市场高地。它以精准关键词布局、高质量内容创作和智能化数据分析为核心,助力企业实现高效营销,引领营销新潮流。随着互联网的飞速发展,方式也在不断变革,在
OpenAI持续12天发布会过半,谷歌深夜截胡式炸场:Gemini 2.0来了,一切为了Agent!
作者|周雅这边OpenAI持续12天的直播连续剧还没完结,那边谷歌已经坐不住了开始放大招,火药味溢出屏幕。就在北京时间12月11日深夜23:30,谷歌正式发布Gemini 2.0,标志着其向能够独立完成复杂任务的AI系统迈出了雄心勃勃的一步。并且谷歌
北海网站制作公众号开发:功能开发与定制,让你的公众号与众不同!北海定期更新和推广,保持公众号的活跃度
云初科技网站制作|抖音推广小程序商城系统|公众号制作电话:13292208571(微信)点击一键拨打电话:13292208571网站建设公司 企业网站制作 微信小程序制作 如何做好网站建设方案 建网站费用 网站设计建设 中小企业网站建设设计制作公司主营
最难一肖一码100|词语释义解释落实
探索与挑战本文将围绕关键词“最难一肖一码”展开讨论,通过对相关词语的释义解释,强调其重要性,并探讨如何在实际生活中进行落实,我们将深入探讨“最难一肖一码”背后的含义,以及如何将其理念付诸实践,以实现个人与社会的共同进步。1
擎朗智能受邀参加百度世界大会,共拓具身服务新未来
11月12日,擎朗智能携旗下爆款机器人T10、T9受邀亮相“应用来了,2024百度世界大会”,大会上展示了生态价值链合作伙伴的创新技术、应用场景。这是擎朗T10自升级服务后的首次线下活动亮相,可爱的人机互动吸睛无数。大会现场,T10作为“门
相关文章
推荐文章
发表评论
0评