ScraperWiki/Python:当属性为fals时过滤记录

2024-06-16 10:42:50 发布

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


我在ScraperWiki上使用以下代码在Twitter上搜索特定的标签。
它工作得很好,并且可以挑选出tweet中提供的任何邮政编码(如果没有邮政编码,则返回false)。这是通过data['location'] = scraperwiki.geo.extract_gb_postcode(result['text'])行实现的。
但我对包含邮政编码信息的tweet感兴趣(这是因为它们将在稍后添加到Google地图中)。
最简单的方法是什么?我对PHP比较熟悉,但Python对我来说是一个全新的领域。 提前感谢您的帮助。
致以最良好的祝愿,
马丁

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

Tags: textfromimportidjsonurldatabase
1条回答
网友
1楼 · 发布于 2024-06-16 10:42:50

你就想要这个吗?我尝试了免费的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

输出:

^{pr2}$

我对它进行了一点改进,因此它比scraperwiki检查更能提取gb邮政编码,后者允许许多误报。基本上,我从here得到了接受的答案,并添加了一些否定的lookbehind/lookahead以过滤掉更多的内容。它看起来像scraper wiki检查在没有否定lookbehind/lookahead的情况下执行regex。希望这有点帮助。在

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

相关问题 更多 >