2017-04-16 57 views
0

我有一個包含超過500K數量的twitter用戶名列表。我可以開發一個使用twython和API密鑰的程序。該計劃和投入過大而不能放在這裏,因此上傳至Github上下載用戶地理位置twitter

Twitter_User_Geolocation

程序運行罰款大約150用戶名的數量,但並不僅限於此。限制使得不可能爲500K +用戶名刮取地理位置。

我正在尋求一些繞過API的幫助,可能會使用網絡抓取技術或任何其他更好的替代方法來刮取用戶名的地理位置。

每一個幫助表示讚賞:)

+0

您正在使用REST API還是Streaming API?我對REST API的侷限性並不積極,但您可以通過流式API簡單地請求地理位置。 – Tristen

+0

我使用twython ..你可以看看代碼ñ幫助我的解決方案請.. –

+0

在你的代碼你也打電話谷歌地圖的API,請確保你尊重的API設置的限制。 https://developers.google。com/maps/documentation/geocoding/usage-limits –

回答

2

我會做的是廢twitter.com/,而不是使用Twitter的API。

主要原因是前端不受限制查詢(或者至少少受限制),即使您需要以秒爲單位調用twitter過多時間,您也可以使用User-Agent和代理進行遊戲,以免被發現。

所以對我來說,報廢是繞過API限制的最簡單方法。

此外,您需要抓取的內容非常容易訪問,我製作了一個簡單的'非常方便的代碼來解析您的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:我解析'永久鏈接'字段,因爲它存儲格式良好的slu to以用於訪問profil的頁面。這是非常髒,但很快&它的工作原理


關於谷歌的API,我surelly會使用一種緩存/數據庫,以避免很多谷歌的電話。

在Python中,沒有DB你可以做一個字典,如:

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

併爲每個位置解析我會在這個字典首先檢查項是否存在,如果是隻取我在這裏的價值,否則調用谷歌API,然後在數據庫字典中保存值。


我認爲用這兩種方法做你將能夠獲得你的數據。

+0

非常感謝。我可以請求一件事..請幫助我把所有的輸入數據框與這些新的列一起輸出......這樣代碼就可以使用..請..: - ) –

+0

請告訴我更多在github公關請。我從來沒有使用數據框,所以我會看到。但我認爲stackoverflow部分已完成,未來的用戶有他們的awnser。 – Arount

+0

我已在Github PR中回覆..謝謝你的想法。 –