下载用户地理位置推特

Download User Geo location twitter

我有一个 Twitter 用户名列表,其中包含超过 500K 的用户名。我可以开发一个使用 twython 和 API 密钥的程序。程序和输入太大,无法放在这里,因此上传到 Github

Twitter_User_Geolocation

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

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

感谢每一个帮助:)

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

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

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

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

为了好玩,我会在你的回购上做一个 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:我解析 'permalink' 字段,因为它存储了格式良好的 slug 以用于访问 profil 的页面。它很脏,但很快并且可以工作


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

在 python 中,没有 db 你可以像这样写一个字典:

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

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


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