下载用户地理位置推特

Posted

技术标签:

【中文标题】下载用户地理位置推特【英文标题】:Download User Geo location twitter 【发布时间】:2017-04-16 07:07:04 【问题描述】:

我有一个 twitter 用户名列表,其中包含超过 500K 的数量。我可以开发一个使用 twython 和 API 密钥的程序。程序和 Inputs 太大放不下所以上传到 Github

Twitter_User_Geolocation

该程序对于 150 个左右的用户名运行良好,但不多于这个。该限制使得无法抓取 500K+ 用户名的地理位置。

我正在寻求绕过 API 的帮助,可能会使用网络抓取技术或任何其他更好的替代方法来抓取用户名的地理位置。

感谢每一个帮助:)

【问题讨论】:

您使用的是 REST API 还是 Streaming API?我对 REST API 的局限性并不乐观,但您可以通过流式 API 简单地请求地理位置。 我正在使用 twython.. 你可以看看代码 n 请帮我解决问题.. 在您调用的代码中,您还调用了 google map API,确保您遵守 API 设置的限制。 developers.google.com/maps/documentation/geocoding/usage-limits @MerouaneBenthameur 正是我担心消除 API 并使用更好的网络抓取技术或任何替代方法。 【参考方案1】:

我会做的是废弃 twitter.com/ 而不是使用 twitter API。

主要原因是前端不受查询限制(或至少不受限制),即使您需要以秒为单位调用 twitter 太多时间,您也可以使用 User-Agent 和代理来避免被发现。

所以对我来说,报废是绕过 API 限制的最简单方法。

此外,你需要爬取的东西真的很容易访问,我做了一个简单的'n'dirty代码来解析你的csv文件和用户的输出位置。

为了好玩,我会在你的 repo 上做一个 PR,但这里是代码:

#!/usr/env/bin python

import urllib2
from bs4 import BeautifulSoup

with open('00_Trump_05_May_2016.csv', 'r') as csv:
    next(csv)
    for line in csv:
        line = line.strip()

        permalink = line.split(',')[-1].strip()
        username  = line.split(',')[0]
        userid    = permalink.split('/')[3]

        page_url = 'http://twitter.com/0'.format(userid)

        try:
            page = urllib2.urlopen(page_url)
        except urllib2.HTTPError:
            print 'ERROR: username  not found'.format(username)
        content = page.read()
        html = BeautifulSoup(content)
        location = html.select('.ProfileHeaderCard-locationText')[0].text.strip()

        print 'username 0 (1) located in 2'.format(username, userid, location)

输出:

username cenkuygur (cenkuygur) located in Los Angeles
username ilovetrumptards (ilovetrumptards) located in 
username MorganCarlston hanifzk (MorganCarlston) located in 
username mitchellvii (mitchellvii) located in Charlotte, NC
username MissConception0 (MissConception0) located in #UniteBlue in Semi-Red State
username HalloweenBlogs (HalloweenBlogs) located in Los Angeles, California
username bengreenman (bengreenman) located in Fiction and Non-Fiction Both
...

显然您应该更新此代码以使其更健壮,但基础已经完成。

PS:我解析“永久链接”字段,因为它存储格式良好的 slug 以使用以访问 profil 的页面。它很脏,但很快,而且效果很好


关于 google API,我肯定会使用一种缓存/数据库来避免过多的 google 调用。

在 python 中,如果没有 db,你可以制作一个像这样的 dict:


   "San Fransisco": [x.y, z.a],
   "Paris": [b.c, d.e],

对于每个要解析的位置,如果键存在,我会首先检查这个字典,如果存在,则从这里获取我的值,否则调用谷歌 API,然后将值保存在 db 字典中。


我认为通过这两种方式,您将能够获取您的数据。

【讨论】:

非常感谢.. 我可以请求一件事吗.. 你能帮我把输入的所有数据框连同这些新列一起放入输出.. 这样代码就可以准备好了使用..请.. :-) 请在 github PR 中告诉我更多信息。我从来没有使用过数据框,所以我会看到的。但我认为 *** 部分已经完成,未来的用户有他们的 awnser。

以上是关于下载用户地理位置推特的主要内容,如果未能解决你的问题,请参考以下文章

获取推文的位置并了解有关推特 API 的热门新事物

使用谷歌地图和推文的地理位置

上推特换ip怎么换

使用 Twitter 搜索 API 的位置和 OAuth 问题

按推文位置和用户位置抓取推文

将 Java 代码生成的文件保存到用户定义的位置,例如下载功能