2017年6月8日 星期四

Python邊學邊記錄-Crawler網路爬蟲-第七課-取得IP國家

Python Crawler

在第六課的時候,我們已經成功的取得了PTT的文章了,但是這樣還不夠,如果可以的話,我們還想取得這發文IP來源是那一個國家,或者是記下這個IP來查詢,到底那幾個帳號是從同一個IP出來就可以分出這是不是住一起的,或是分身帳號!

如果要查詢國家的話,可以透過http://freegeoip.net/json/網址或是ip來做查詢!
這是一個免費查詢ip國家的服務,每小時可以有15000次的查詢額度。

freegeoip回傳json格式如下:
freegeoip


我們在取得文章列表之後,寫入了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!
大概就是這樣了。









沒有留言:

張貼留言