vlambda博客
学习文章列表

Github实测可用的Twitter爬虫--Scweet

Github实测可用的Twitter爬虫--Scweet

2020年twitter重写网页之后,对GitHub上的爬虫进行了一系列整改,导致一些比较健壮的爬虫被封了,本次使用测试于2022年3月1日。对Scweet(https://github.com/Altimis/Scweet)爬取历史,指定时间内基于关键词的推文爬取测试。此代码可以获取到一定的推文但是存在一个很大的问题。

Github实测可用的Twitter爬虫--Scweet
Github实测可用的Twitter爬虫--Scweet
Github实测可用的Twitter爬虫--Scweet
Github实测可用的Twitter爬虫--Scweet


Github实测可用的Twitter爬虫--Scweet



使用设备--Windows

安装包--requestment.txt

代码中使用示例--Example.py




因为我的需求是爬取历史推文

所以只测试了该部分功能

Github实测可用的Twitter爬虫--Scweet

几个关键的参数

words:要获取的关键词

since: 要爬取的起始时间

until:爬取的截止时间

interval:时间间隔

(interval=1--最小的时间间隔1天)

Github实测可用的Twitter爬虫--Scweet

这个代码是可以实现爬取历史推文的,因为他使用的是selenium,简单的说就是驱动浏览器,模拟人在操作,在twitter中进行高级搜索,这里就有一个很重要的前提需要知道,会在下面这个代码存在问题中提到,获取到的结果如下:

驱动浏览器进行高级搜索(可以自己去看一下高级搜索的规则):


Github实测可用的Twitter爬虫--Scweet


scroll:模拟滚动鼠标获取新的内容

Github实测可用的Twitter爬虫--Scweet


存储结果,存储为csv格式:

测试代码:

from Scweet.scweet import scrape# from Scweet.user import get_user_information, get_users_following, get_users_followers
# scrape top tweets with the words 'covid','covid19' and without replies. the process is slower as the interval is# smaller (choose an interval that can divide the period of time betwee, start and max date) scrape english top# tweets geolocated less than 200 km from Alicante (Spain) Lat=38.3452, Long=-0.481006.data = scrape(words=['olympic'], since="2022-02-04", until="2022-02-10", from_account=None, interval=1, headless=False, display_type=False, save_images=False, lang="en", resume=False, filter_replies=False, proximity=False)



这个代码存在一个很大的问题,这个问题来源于twitter自身的机制,twitter在高级搜索中,虽然可以设置搜索时间段进行搜索,但是在浏览时会出现滑动几页后没有内容了,并非是滚动太快或者其他原因,我在其他方法中类似于翻页的爬取过程中也有出现这种问题,爬到几条后,后面的内容就是重复的。

所以这个代码爬取的历史推文实际一天可用的很少只有几十条可能,而且因为爬取的时间开始为设置时间的24点,所以获取到的几十条推文多为23:,对于数据分析,这些内容显然是不够的,至于其他GitHub上使用较多的爬虫,大多还是没有进行更新,不能使用。

对于Twitter API 要想获取历史推文,这里并不是指指定用户的历史推文,而是基于关键词的历史推文,API的权限必须是企业级别的,而且应该是收费的。这也是twitter对用户信息的一种保护吧。

后续我自己写的(正在写)如果可以获取,会进行分享的。