python - 从 Twitter 用户列表 (csv) 中抓取加入日期/用户信息
问题描述
我正在寻找一个可能非常简单的问题的解决方案,并且非常感谢一些帮助或提示。我有 python 和 webscraping 的基本知识。
我想在 Twitter 上探索某个主题标签及其背后的社区。使用twint,我已将所有提及主题标签的推文下载到 .csv 文件中。之后,我清理了 .csv,这样就没有同一用户的多个条目(来自具有相同主题标签的多个推文)并将其保存为 .txt。我现在想获得关于上述列表中大约 1.500 名用户的更多信息——主要是他们加入推特的日期,推文的数量将是一个奖励。
我试过的: Twint 应该能够做到这一点,但它没有用(我正在使用他们 github 上提供的 docker 镜像)。我试图通过以下方式获取用户信息:
twint --userlist /bin/userlist.txt --user-full -o userlistfull.csv --csv
Twint 发出一条很长的错误消息,如果我理解正确的话,它与 twint 中的一个开放错误有关:
CRITICAL:root:twint.get:User:'url'
ERROR:root:twint.run:Twint:Lookup:Unexpected exception occurred.
Traceback (most recent call last):
File "/usr/local/lib/python3.6/site-packages/twint/run.py", line 307, in Lookup
await get.User(self.config.Username, self.config, db.Conn(self.config.Database))
File "/usr/local/lib/python3.6/site-packages/twint/get.py", line 228, in User
await Users(j_r, config, conn)
File "/usr/local/lib/python3.6/site-packages/twint/output.py", line 177, in Users
user = User(u)
File "/usr/local/lib/python3.6/site-packages/twint/user.py", line 31, in User
_usr.url = ur['data']['user']['legacy']['url']
KeyError: 'url'
Traceback (most recent call last):
File "/usr/local/bin/twint", line 8, in <module>
sys.exit(run_as_command())
File "/usr/local/lib/python3.6/site-packages/twint/cli.py", line 339, in run_as_command
main()
File "/usr/local/lib/python3.6/site-packages/twint/cli.py", line 324, in main
run.Lookup(c)
File "/usr/local/lib/python3.6/site-packages/twint/run.py", line 386, in Lookup
run(config)
File "/usr/local/lib/python3.6/site-packages/twint/run.py", line 329, in run
get_event_loop().run_until_complete(Twint(config).main(callback))
File "/usr/local/lib/python3.6/asyncio/base_events.py", line 488, in run_until_complete
return future.result()
File "/usr/local/lib/python3.6/site-packages/twint/run.py", line 235, in main
await task
File "/usr/local/lib/python3.6/site-packages/twint/run.py", line 270, in run
await self.Lookup()
File "/usr/local/lib/python3.6/site-packages/twint/run.py", line 307, in Lookup
await get.User(self.config.Username, self.config, db.Conn(self.config.Database))
File "/usr/local/lib/python3.6/site-packages/twint/get.py", line 228, in User
await Users(j_r, config, conn)
File "/usr/local/lib/python3.6/site-packages/twint/output.py", line 177, in Users
user = User(u)
File "/usr/local/lib/python3.6/site-packages/twint/user.py", line 31, in User
_usr.url = ur['data']['user']['legacy']['url']
KeyError: 'url'
我试图遍历列表并让 twint 单独查找每个用户名,但它也不起作用:
import twint
import os
import sys
import nest_asyncio
nest_asyncio.apply()
c = twint.Config()
with open("userlist.txt", "r") as a_file:
for line in a_file:
stripped_line = line.strip()
stripped_line = c.Username
twint.run.Search(c)
用 Google Colab 运行它,我给了我
CRITICAL:root:twint.run:Twint:Feed:noDataExpecting value: line 1 column 1 (char 0)
sleeping for 1.0 secs
CRITICAL:root:twint.run:Twint:Feed:noDataExpecting value: line 1 column 1 (char 0)
sleeping for 8.0 secs
CRITICAL:root:twint.run:Twint:Feed:noDataExpecting value: line 1 column 1 (char 0)
sleeping for 27.0 secs
CRITICAL:root:twint.run:Twint:Feed:noDataExpecting value: line 1 column 1 (char 0)
sleeping for 64.0 secs
我在寻找 什么 获取列表中这些用户的加入日期的最简单的解决方案是什么?我应该使用不同的库吗?我可以用 beautifulsoup 之类的东西遍历列表并刮掉加入日期吗?我该怎么做?
非常感谢您的帮助,在此先感谢!
解决方案
只需在twint/user.py中替换这一行:
_usr.url = ur['data']['user']['legacy']['url']
对此:
try:
_usr.url = ur['data']['user']['legacy']['url']
except:
_usr.url = ''
推荐阅读
- bash - 用于删除旧备份文件的现有 bash 脚本 - 它是如何工作的?
- spring - 如何使用spring在mongodb中插入一个对象
- docker - Docker 运行命令在主机上找不到目录
- mysql - 根据真/假标志对日期进行不同的排序
- python - 如何使用 python Ray 在一个大列表上并行化?
- vue.js - Vue路由器在按键上重复路由
- php - 在会话 Laravel 7 中更改变量
- ios - AVPlayer 可以从 API 端点正确流式传输视频文件吗?
- python - 如何使用kafka-python计算主题中的记录(消息)数
- c++ - 使用 FFmpeg API 将 RTP 有效负载数据写入音频文件