Python Tweepy full archive search、Twitter Advanced search和GetOldTweets3会返回不同数量的推文

Python Tweepy full archive search、Twitter Advanced search和GetOldTweets3会返回不同数量的推文,python,twitter,tweepy,Python,Twitter,Tweepy,使用Tweepy、GetOldTweets3和具有以下参数的Twitter高级搜索时: 询问:“事故” 地点:“德克萨斯州达拉斯” 自:“2018年1月1日” 截止日期:“2018年1月2日” 每种搜索方法的tweet数量都不同。Tweepy使用完整存档搜索,返回12条推文。GetOldTweets3返回22条推文。使用Twitter高级搜索返回3条推文。推特数量不同是有原因的吗?推特通过其网站进行搜索的运营商与其API不同 ,产生22条推文。如果您只查看最上面的,则只有3个,是的,但您可以

使用Tweepy、GetOldTweets3和具有以下参数的Twitter高级搜索时:

  • 询问:“事故”
  • 地点:“德克萨斯州达拉斯”
  • 自:“2018年1月1日”
  • 截止日期:“2018年1月2日”

每种搜索方法的tweet数量都不同。Tweepy使用完整存档搜索,返回12条推文。GetOldTweets3返回22条推文。使用Twitter高级搜索返回3条推文。推特数量不同是有原因的吗?

推特通过其网站进行搜索的运营商与其API不同

,产生22条推文。如果您只查看最上面的,则只有3个,是的,但您可以通过单击“最新”选项卡查看所有这些。这个查询使用的
附近的
操作符似乎没有明确的文档记录,因此不清楚它到底是如何工作的。事实上,位置/地点似乎不再是高级搜索UI的一部分。从历史上看,这似乎是通过在指定位置的半径范围内搜索(如果未设置
in
操作符,则默认为15英里)来实现的

我假设您正在使用的当前分支/,使用的是的完整归档端点。类似于api.search\u full\u archive(“环境名称”,“事故地点:德克萨斯州达拉斯”,fromDate=201801010000,toDate=201801020000)
实际上返回了12条推文。但是,这是使用文档化的
位置
,该位置具有特定的定义行为:

匹配使用指定位置或Twitter位置ID标记的推文

这意味着它将只返回专门标记了该位置的tweet,而不包括某个半径内附近的其他位置。奇怪的是,这些结果实际上包含了两条推文,网站的搜索漏掉了,而且似乎没有通过位置搜索返回。这可能是因为,但同样,很难确定确切的原因,因为Twitter的网站搜索没有文档记录,有点像一个黑盒子

如果要使用premium search API为搜索指定一组坐标和半径,可以使用
point\u radius
premium search操作符进行指定。使用Tweepy's(使用Twitter API)和“Dallas,TX”查询,返回的代表Dallas,TX指定质心
[-96.7301749064317,32.8198584999995]
。无法保证这些坐标是Twitter网站搜索使用的坐标,但通过一些测试,使用这些坐标和
点半径
,将返回与网站搜索结果匹配的精确结果的半径似乎在17到18英里之间。在半径为17.5英里的地方,只有3条来自Plano的额外推文

GetOldTweets3不使用Twitter的API,而是直接抓取站点。这不应被认为是可靠的,并且不利于:

明确禁止未经Twitter事先同意而删除服务


如果你想得到最准确、定义最明确的结果,你应该使用Twitter的API。如果您希望以编程方式检索这些结果而不违反Twitter的TOS,那么这是唯一有效的方法。按位置搜索的选项可以是按名称或Twitter地点ID、坐标和半径或边界框,分别使用
地点
点半径
、或
边界框
高级搜索运算符。请注意,由于某些原因,正如其他两条tweet所展示的,某些tweet可能只能通过特定的位置而不是区域找到。

您假设每个搜索工具都会返回相同的结果。根据我的经验,他们通常不会这样做。@RobertHarvey这有什么原因吗?如果有,哪种搜索方法会返回最准确的结果?是的,这是有原因的。每个搜索引擎都有不同的编写方式,并有不同的规则来确定匹配项。如果您想要精确的结果,您需要使用符合ANSI SQL(标准)的SQL数据库之类的东西。