2012-05-03 44 views
0


我在ScraperWiki上使用以下代碼來搜索特定哈希標籤的Twitter。
它工作得很好,正在挑選推文中提供的任何郵政編碼(如果沒有可用的郵件,則返回虛假)。這是通過data['location'] = scraperwiki.geo.extract_gb_postcode(result['text'])行來實現的。
但我只是只有對包含郵編信息的推文感興趣(這是因爲它們將在稍後階段添加到Google地圖中)。
最簡單的方法是什麼?我對PHP相對來說很失敗,但是Python對我來說是一個全新的領域。 在此先感謝您的幫助。
最良好的祝願,
馬丁ScraperWiki/Python:當屬性爲false時過濾掉記錄

import scraperwiki 
import simplejson 
import urllib2 

QUERY = 'enter_hashtag_here' 
RESULTS_PER_PAGE = '100' 
NUM_PAGES = 10 

for page in range(1, NUM_PAGES+1): 
    base_url = 'http://search.twitter.com/search.json?q=%s&rpp=%s&page=%s' \ 
     % (urllib2.quote(QUERY), RESULTS_PER_PAGE, page) 
    try: 
     results_json = simplejson.loads(scraperwiki.scrape(base_url)) 
     for result in results_json['results']: 
      #print result 
      data = {} 
      data['id'] = result['id'] 
      data['text'] = result['text'] 
      data['location'] = scraperwiki.geo.extract_gb_postcode(result['text']) 
      data['from_user'] = result['from_user'] 
      data['created_at'] = result['created_at'] 
      print data['from_user'], data['text'] 
      scraperwiki.sqlite.save(["id"], data) 
    except: 
     print 'Oh dear, failed to scrape %s' % base_url 
     break 

回答

1

你只是想這樣?我試圖在免費的ScraperWiki測試頁面上看起來像做你想做的事情。如果你正在尋找更復雜的東西,請告訴我。

import scraperwiki 
import simplejson 
import urllib2 

QUERY = 'meetup' 
RESULTS_PER_PAGE = '100' 
NUM_PAGES = 10 

for page in range(1, NUM_PAGES+1): 
    base_url = 'http://search.twitter.com/search.json?q=%s&rpp=%s&page=%s' \ 
     % (urllib2.quote(QUERY), RESULTS_PER_PAGE, page) 
    try: 
     results_json = simplejson.loads(scraperwiki.scrape(base_url)) 
     for result in results_json['results']: 
      #print result 
      data = {} 
      data['id'] = result['id'] 
      data['text'] = result['text'] 
      data['location'] = scraperwiki.geo.extract_gb_postcode(result['text']) 
      data['from_user'] = result['from_user'] 
      data['created_at'] = result['created_at'] 
      if data['location']: 
       print data['location'], data['from_user'] 
       scraperwiki.sqlite.save(["id"], data) 
    except: 
     print 'Oh dear, failed to scrape %s' % base_url 
     break 

輸出:

P93JX VSDC 
FV36RL Bootstrappers 
Ci76fP Eli_Regalado 
UN56fn JasonPalmer1971 
iQ3H6zR GNOTP 
Qr04eB fcnewtech 
sE79dW melindaveee 
ud08GT MariaPanlilio 
c9B8EE akibantech 
ay26th Thepinkleash 

所以這是一個有點拾取比scraperwiki支票提取GB郵政編碼,它可以讓雖然相當多的誤報,我提煉了一點。基本上我從here那裏接受了答案,並增加了一些負面的lookbehind/lookahead來過濾掉更多。它看起來像刮板維基檢查執行的正則表達式沒有負面lookbehead/lookahead。希望有點幫助。

import scraperwiki 
import simplejson 
import urllib2 
import re 

QUERY = 'sw4' 
RESULTS_PER_PAGE = '100' 
NUM_PAGES = 10 

postcode_match = re.compile('(?<![0-9A-Z])([A-PR-UWYZ0-9][A-HK-Y0-9][AEHMNPRTVXY0-9]?[ABEHMNPRVWXY0-9]? {0,2}[0-9][ABD-HJLN-UW-Z]{2}|GIR 0AA)(?![0-9A-Z])', re.I) 

for page in range(1, NUM_PAGES+1): 
    base_url = 'http://search.twitter.com/search.json?q=%s&rpp=%s&page=%s' \ 
     % (urllib2.quote(QUERY), RESULTS_PER_PAGE, page) 
    try: 
     results_json = simplejson.loads(scraperwiki.scrape(base_url)) 
     for result in results_json['results']: 
      #print result 
      data = {} 
      data['id'] = result['id'] 
      data['text'] = result['text'] 
      data['location'] = scraperwiki.geo.extract_gb_postcode(result['text']) 
      data['from_user'] = result['from_user'] 
      data['created_at'] = result['created_at'] 
      if data['location'] and postcode_match.search(data['text']): 
       print data['location'], data['text'] 
       scraperwiki.sqlite.save(["id"], data) 
    except: 
     print 'Oh dear, failed to scrape %s' % base_url 
     break 
+0

嗨安德魯,謝謝你的回覆。不太...我正在尋找包含特定主題標籤的推文(比方說#食物 - 我很餓!),但我只對那些包含郵編的人感興趣。所以推文,比如「任何人都知道SW4 0JA附近有哪些食品可以買到?」正是我所追求的 - 而推文如「任何人都知道我能在這裏得到一些體面的食物?」!將被丟棄。希望解釋它 - 再次感謝您的幫助! – Martin

+0

這不是以上所做的嗎?我只打印/保存帶有郵編的推文。我只使用SW4作爲hashtag,以便快速獲取數據。 –

+0

我已經改變它,所以它正在尋找#meetup,而只是哈希碼和用戶名。如果那不是你在之後我不確定你在做什麼之後! –