本章由網絡爬蟲的編寫來學習python。首先寫幾行代碼抓取百度首頁,提提精神,代碼如下:
import urllib.request file=urllib.request.urlopen("http://www.baidu.com") data=file.read() handle=open("code/python/baidu.html","wb") handle.write(data) handle.close()
除了第一行導入第三方包之外,我們用5行代碼實現了一個簡單的程序:讀取百度首頁並存儲在本地制定文件。下面來詳細介紹代碼:
1.import urllib.request
urllib庫是python的一個操作url功能強大的庫,經常用在爬蟲程序中。使用上述代碼,我們便可以在程序中打開並爬取網頁。
2.urllib.request.urlopen("http://www.baidu.com")
使用urlopen方法,參數爲想爬取的網頁。成功之後,把爬取的內容賦值給file變量。
另,讀取file數據有2種方法:
file.read() //讀取全部數據
file.readline()//讀取一行數據
3.handle=open("code/python/baidu.html","wb")
通過open函數打開一個文件,並且以「wb」即二進制寫入方式打開,然後賦值給hadle變量。需要注意首先建立對應的文件夾和文件,否則無法運行。錯誤如下:
Traceback (most recent call last): File "<pyshell#10>", line 1, in <module> fhandle=open("/code/python","wb") FileNotFoundError: [Errno 2] No such file or directory:
4.handle.write(data)
使用write()方法將data數據寫入文件
5.handle.close()
關閉文件。操作完文件之後一定要記得關閉。至此,我們就把百度首頁保存到了本地文件:
打開文件顯示如下:
其實,上面5行代碼可以精簡爲1行,功能不變但代碼更少:
>>> import urllib.request >>> >>> urllib.request.urlretrieve("http://www.baidu.com","code/python/baidu2.html") ('code/python/baidu2.html', <http.client.HTTPMessage object at 0x1060f8240>) >>>
接着,讓我們更進一步,用程序模擬百度搜索操作。
當我們在百度上查詢時,是在輸入框中輸入關鍵字,然後點擊回車,接着百度返回搜索結果。這一系列操作通過http語音描述如下:使用get方法,通過"http://www.baidu.com/s?wd="+關鍵字調用百度服務。明白背後原理之後,我們用python模擬搜索「逃稅」的操作,代碼如下:
>>> url="http://www.baidu.com/s?wd=" >>> key="逃稅" >>> key_code=urllib.request.quote(key) >>> urllib.request.urlretrieve(url+key_code,"code/python/baidu逃稅.html") ('code/python/baidu逃稅.html', <http.client.HTTPMessage object at 0x1060f8f98>)
打開本地文件後,發現和在百度上輸入一模一樣。
上面代碼有個關鍵點:URL標準中只允許一部分ASCII字符(字母、數字),其他的比如漢字不符合標準。因此不能直接在url後面拼接漢字,需要使用quote()方法進行編碼。相應的,如果需要對編碼的網址進行解碼,可以使用unquote()方法。
最後,以一個不完整的圖片爬蟲程序結束。
現在,我們想把淘寶網上連衣裙分類裏的圖片全部下載到本地。首先,找到目標網址(https://s.taobao.com/list?spm=a217f.8051907.312003.5.19833308A93qss&q=%E8%BF%9E%E8%A1%A3%E8%A3%99&cat=16&seller_type=taobao&oetag=6745&source=qiangdiao&bcoffset=12&s=180)。打開開發者工具,查看圖片地址。
可以看到,我們已經拿到了圖片路徑,在瀏覽器上加上前綴"http://"就可以打開。
因此,程序邏輯如下:
循環獲取網址內容->對於每個網址找到需要的圖片->構造圖片路徑,下載到本地
具體代碼請等下期內容。