由于@BittoBennichan,我已经能够build抓取这个小python东西了,它可以抓取在Twitter上发布的媒体中标记的用户ID:
from bs4 import BeautifulSoup
from selenium import webdriver
import time
# Create a new instance of the Firefox driver
driver = webdriver.Firefox()
# go to page
driver.get("http://twitter.com/XXXXXX/media")
#You can adjust it but this works fine
SCROLL_PAUSE_TIME = 2
# Get scroll height
last_height = driver.execute_script("return document.body.scrollHeight")
while True:
# Scroll down to bottom
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
# Wait to load page
time.sleep(SCROLL_PAUSE_TIME)
# Calculate new scroll height and compare with last scroll height
new_height = driver.execute_script("return document.body.scrollHeight")
if new_height == last_height:
break
last_height = new_height
# Now that the page is fully scrolled, grab the source code.
src = driver.page_source
#Past it into BS
soup = BeautifulSoup(src, 'html.parser')
divs = soup.find_all('div',class_='account')
#PRINT RESULT
#print('printing results')
#for div in divs:
# print(div['data-user-id'])
#SAVE IN FILE
print('Saving results')
with open('file.txt','w') as f:
for div in divs:
f.write(div['data-user-id']+'\n')
因此程序运行正常。它检索id并将其打印或将其写入txt文件。现在,我可以将此ID列表粘贴到Calc中,并添加数据透视表以查看每个单个ID被标记了多少次。 但!我仍然有一些问题:
-我仅获得ID,而不获得用户名。现在更简单了:在收集ID的同时收集用户名并将它们放到文件中吗?还是将ids文件转换为用户名文件?最后的解决方案怎么可能?
-我无法无限向下滚动。我回到了2018年9月,仅此而已。它只是说“回到顶部”。现在,是因为我没有登录Twitter还是由于某些内置限制?
如果您有任何意见,想法等,任何帮助将不胜感激。 谢谢!
EDIT1: 我从here找到了这个(Tweepy)解决方案:
def get_usernames(ids):
""" can only do lookup in steps of 100;
so 'ids' should be a list of 100 ids
"""
user_objs = api.lookup_users(user_ids=ids)
for user in user_objs:
print(user.screen_name)
因此,由于我的列表超过100个,因此我应该这样做:
对于更大的一组ID,您可以将其放在for循环中并调用 遵守twitter API限制。
答案 0 :(得分:0)
您的代码没有为我生成ID,因此最初无法测试这些解决方案。由于我没有调查问题,因此不确定是什么问题,但似乎我的源html没有任何class='account'
。因此,我在代码中将其更改为仅说:“查找所有具有属性“ data-user-id”的div标签:
divs = soup.find_all('div', {"data-user-id" : re.compile(r".*")})
1)要拥有一个csv,您只需编写并另存为csv,而不是txt。另一个选择是使用ID创建一个数据框,然后使用pandas通过df.to_csv('path/to/file.csv')
2)将其放入列表也是一件很容易的事情。
创建ID列表-for
循环
#TO PUT INTO LIST (FOR LOOP)
id_list = []
for div in divs:
id_list.append(div['data-user-id'])
print (id_list)
创建ID列表-列表理解
#TO PUT INTO LIST (LIST COMPREHENSION)
id_list = [ div['data-user-id'] for div in divs ]
写入CSV
#SAVE IN FILE
import csv
print('Saving results')
with open('file.csv','w', newline='') as f:
writer = csv.writer(f)
for div in divs:
writer.writerow([div['data-user-id']])