如何在循环中调用DataFrame的经纬度值实现Twitter数据爬取
批量通过经纬度爬取Twitter数据
问题背景
已从谷歌表格加载经纬度数据到DataFrame,需要替换固定经纬度,遍历DataFrame每行的经纬度值,批量爬取指定关键词的Twitter数据。
步骤1:正确加载经纬度数据到DataFrame
先修正数据加载代码,将表格数据赋值给df变量,确保后续循环能正常调用:
worksheet = gc.open('LA Grid').sheet1 rows = worksheet.get_all_values() print(rows) import pandas as pd # 将表格数据转为DataFrame并赋值给df df = pd.DataFrame.from_records(rows)
注意:确保你的DataFrame中,每行包含纬度、经度两列数据(可根据实际列索引调整后续代码)。
步骤2:修改循环逻辑,批量爬取数据
调整原循环代码,遍历DataFrame的每一行,动态生成经纬度搜索参数,将每次爬取的结果收集后合并为最终数据集:
# 先安装依赖(如果未安装) # !pip install snscrape import pandas as pd import snscrape.modules.twitter as sntwitter import itertools total = [] # 遍历DataFrame的每一行 for index, row in df.iterrows(): # 从当前行提取纬度和经度(假设第0列是纬度,第1列是经度,根据实际列位置调整) latitude = row[0] longitude = row[1] # 拼接成Twitter搜索要求的地理格式:"纬度, 经度, 搜索半径" loc = f"{latitude}, {longitude}, 30km" # 爬取当前经纬度下含"parking lot"关键词的Twitter数据,最多50条 current_data = pd.DataFrame(itertools.islice( sntwitter.TwitterSearchScraper(f'parking lot geocode:"{loc}"').get_items(), 50 ))[['date', 'content']] # 将当前爬取的数据添加到总列表中 total.append(current_data) # 合并所有批次的数据为一个DataFrame final_df = pd.concat(total, ignore_index=True) # 查看前几行结果 final_df.head()
关键说明
- 列索引调整:如果你的DataFrame中纬度、经度所在的列不是第0、1列,需要修改
row[0]、row[1]为对应的列索引或列名(比如row['纬度'])。 - 搜索参数:可根据需求修改关键词(
parking lot)、搜索半径(30km)和爬取数量(50)。 - 异常处理:如果需要应对网络错误或无效经纬度,可以在循环中添加
try-except块,避免程序中断。
内容的提问来源于stack exchange,提问作者Valeria Ospital
相关产品推荐
相关产品推荐

