Python Crawler
在第六課的時候,我們已經成功的取得了PTT的文章了,但是這樣還不夠,如果可以的話,我們還想取得這發文IP來源是那一個國家,或者是記下這個IP來查詢,到底那幾個帳號是從同一個IP出來就可以分出這是不是住一起的,或是分身帳號!
如果要查詢國家的話,可以透過http://freegeoip.net/json/網址或是ip來做查詢!
這是一個免費查詢ip國家的服務,每小時可以有15000次的查詢額度。
freegeoip回傳json格式如下:
我們在取得文章列表之後,寫入了articles這個list內,
country_to_count = dict()
for article in articles: print('文章IP:', article['title']) page = get_articles(ptt_url + article['href']) if page: ip = get_ip(page) country = get_country(ip) if country in country_to_count.keys(): country_to_count[country] += 1 else: country_to_count[country] = 1
單純的迴圈計算出現在touple內出現的次數,若是沒有出現就給值『1』
get_ip的部份如下:
def get_ip(SoureceIP):
reIP = '來自: \d+\.\d+.\d+.\d+' # 這是把頁面內的發文ip取出的正則式
match = re.search(reIP,SourceIP) # 確認文章內是否有相對應的格式
if match:
return match.group(0).replace('來自: ','') # 回傳第一個,另外也取代掉『來自: 』
else:
return None
取回ip之後,就丟給freegeoip去回傳json
def get_country(ip):
if(ip):
data = json.loads(request.get('http://freegeoip.net/json/' + ip).text)
countryName = data['country_name'] if data['country_name'] else None
return countryName
return None
因為有用到json.loads,記得要import json!
大概就是這樣了。
沒有留言:
張貼留言