用Python 3开发网络爬虫

By Terrill Yang (Github: https://github.com/yttty)

用Python 3开发网络爬虫 - Chapter 07 使用API

在这一章,我们将尝试使用一些API来完成抓取,首先看一个查看IP地理信息的例子


In [12]:
import json
from urllib.request import urlopen

def getCountry(ipAddress):
    response = urlopen("http://freegeoip.net/json/"+ipAddress).read().decode('utf-8')
    responseJson = json.loads(response)
    return responseJson.get("country_code")

http://freegeoip.net 这个网站根据你的IP返回对应的地址,如果将IP作为参数传入,那么将返回该IP对应的地址,如下所示


In [13]:
print(getCountry("50.78.253.58"))


US

In [14]:
print(getCountry(""))


CN

用Python解析JSON


In [21]:
import json

jsonString = '{"arrayOfNums":[{"number":0},{"number":1},{"number":2}],"arrayOfFruits":[{"fruit":"apple"},{"fruit":"banana"},{"fruit":"pear"}]}'
jsonObj = json.loads(jsonString)

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C++、C#、Java、JavaScript、Perl、Python等)。这些特性使JSON成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率)。( 来自百度百科 )

将上面的jsonString对齐格式,可以看到他其实是长这个样子的:

{
    "arrayOfNums": [
        {
            "number": 0
        }, 
        {
            "number": 1
        }, 
        {
            "number": 2
        }
    ], 
    "arrayOfFruits": [
        {
            "fruit": "apple"
        }, 
        {
            "fruit": "banana"
        }, 
        {
            "fruit": "pear"
        }
    ]
}

其中[]框住的是数组,而{}框住的是对象(object), 下面我们尝试对这个jsonObj进行操作


In [22]:
print(jsonObj.get("arrayOfNums"))


[{'number': 0}, {'number': 1}, {'number': 2}]

In [23]:
print(jsonObj.get("arrayOfNums")[1])


{'number': 1}

In [24]:
print(jsonObj.get("arrayOfNums")[1].get("number")+jsonObj.get("arrayOfNums")[2].get("number"))


3

In [25]:
print(jsonObj.get("arrayOfFruits")[2].get("fruit"))


pear

In [ ]: