Python-簡單的爬蟲語句


今天做一個簡單的天氣查詢的程序,主要用到Urllib2(python自帶的),和Json(Java Script Object Notation,JavaScript 對象表示法),安裝步驟:

json的安裝包在這里:https://www.lfd.uci.edu/~gohlke/pythonlibs/#simplejson,

打開cmd,進入到Python安裝目錄的Scripts文件夾中.比如:D:\Program Files\Python\Scripts。使用pip安裝剛剛下載好的whl文件,pip.exe install *.whl,例如:

cd D:\Program Files\python\Scripts>
pip.exe install D:\python\simplejson-3.10.0-cp36-cp36m-win_amd64.whl 




提示安裝成功后,在\Python\Lib\site-packages目錄下可以看到simplejson.

Urllib2用於獲取網頁的內容,Json用於對內容里的東西進行分析處理,

以下是一個簡單的爬取語句:



import urllib2
web = urllib2.urlopen("http://www.sina.com")          #這里得加一個http://,不是直接寫網頁地址的
content = web.read()
print content
實例:
import urllib2
web = urllib2.urlopen("http://www.weather.com.cn/data/cityinfo/101200101.html")          #這里得加一個http://,不是直接寫網頁地址的
content = web.read()
print content
天氣的查詢是通過中國天氣網(www.weather.com.cn)的信息獲取完成的,點擊http://www.weather.com.cn/data/cityinfo/101010100.html會發現101010100是北京的天氣,這個網站是通過代號查詢的,所以我們做一個城市與代號的字典,city.py,放在網盤中(https://pan.baidu.com/s/1c0Nw4m?errno=0&errmsg=Auth%20Login%20Sucess&&bduss=&ssnerror=0&traceid=),使用的時候只要放在和你的代碼同一路徑下,用

from city import city

前一個“city”是模塊名,也就是py文件的名稱,后一個“city”是模塊中變量的名稱。

我們分析http://www.weather.com.cn/data/cityinfo/101010100.html里的內容發現我們想要的內容都在里面,如果把101010100改成別的就變成了其他城市的天氣,所以:



#python默認ASCII碼,這一句是為了轉換為UTF-8,不是注釋同時city.py里也要聲明
#在這個程序中第一行加了   # -*- coding: UTF-8 -*-     這句反而不行了,不知道為啥


import urllib2
import json   


city = {
    '北京': '101010100',
    '上海': '101020100',
    '天津': '101030100',
    '蘭州': '101160101',
    '鄂州': '101200301',    
    '荊州': '101200801',
    '香港': '101320101',
    '新界': '101320103',
    '澳門': '101330101',
    '台北': '101340101',
    '高雄': '101340201',
    '台中': '101340401'
}


cityname = raw_input("The weather in which city do you want ?")
citycode = city.get(cityname)
print citycode             #測試代碼,測試可行


url = ("http://www.weather.com.cn/data/cityinfo/%s.html"  %citycode)    #一定要注意%s
pagecontent = urllib2.urlopen(url).read()
print pagecontent
binggo。

得到如下數據:

{"weatherinfo":

{"city":"武漢",

"cityid":"101200101",

"temp1":"7℃",

"temp2":"19℃",

"weather":"小雨轉多雲",

"img1":"n7.gif",

"img2":"d1.gif",

"ptime":"18:00"}

}

接下來是分析的環節,我們發現這是嵌套的字典,我們只需要里面的temp1,2和weather的信息即可。

那么如何提取嗯?

現在我們需要借助json來完成了,可以先了解一下:http://www.w3school.com.cn/json/

import json

data = json.loads(pagecontent),這時候的data已經是一個字典,盡管在控制台中輸出它,看上去和pagecontent沒什么區別

這是編碼上有區別:



{u'weatherinfo': {u'city': u'\u5357\u4eac', u'ptime': u'11:00', u'cityid': u'101190101', u'temp2': u'28\u2103', u'temp1': u'37\u2103', u'weather': u'\u591a\u4e91', u'img2': u'n1.gif', u'img1': u'd1.gif'}}



但如果你用type方法看一下它們的類型:



print type(pagecontent)

print type(data)



就知道區別在哪里了。

import urllib2
import json


city = {
    "北京":"101010100",
    "武漢":"101200101"
    }
cityname = raw_input("which city?\n")
citycode = city.get(cityname)
print citycode
print


if citycode:
    url = ("http://www.weather.com.cn/data/cityinfo/%s.html"  %citycode)
    print url
    print
    page = urllib2.urlopen(url).read()
    print page   #這里打印出來的東西里就有我們想要的東西了
    print

   #使用json
    data = json.loads(page)    #loads是json方法中的一種
    result = data["weatherinfo"]
    str_temp = ("%s\t%s - %s") % (
        result["weather"],
        result["temp1"],
        result["temp2"]
        )
    print str_temp
else:
    print "Can not find this city."
就可以輸出:

晴-2℃ - 16℃

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM