下载用户地理位置twi

2024-06-01 12:15:31 发布

您现在位置:Python中文网/ 问答频道 /正文

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

Twitter_User_Geolocation

对于150个左右的用户名,这个程序运行得很好,但不超过150个。这一限制使得无法为500K+个用户名搜索地理位置。你知道吗

我正在寻求一些绕过API的帮助,可能会使用网页抓取技术或任何其他更好的替代抓取用户名的地理位置。你知道吗

感谢您的帮助:)


Tags: 程序github程序运行api网页列表密钥地理位置
1条回答
网友
1楼 · 发布于 2024-06-01 12:15:31

我要做的就是报废twitter.com/而不是使用twitter API。你知道吗

主要原因是前端没有查询限制(或者至少没有那么限制),即使你需要在几秒钟内调用twitter太多时间,你也可以使用用户代理和代理来避免被发现。你知道吗

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

此外,你需要的爬行是非常容易访问,我做了一个简单的'n'肮脏的代码,解析你的csv文件和用户的输出位置。你知道吗

为了好玩,我会在你的回购上做一个公关,但代码如下:

#!/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的页面。它很脏,但很快&它能工作


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

在python中,如果没有db,您只需生成如下dict:

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

对于要解析的每个位置,我首先检查这个dict是否存在键,如果是,从这里取我的值,否则调用googleapi,然后将值保存在db dict中


我认为有了这两种方法,你就能得到你的数据。你知道吗

相关问题 更多 >