By 一頁編程
下面以幾個(gè)例子來熟悉一下Requests庫的使用知市,至于說怎么能夠從返回的信息中解析返回的內(nèi)容,那是我們后面將要講的內(nèi)容驾诈。
爬取京東商品頁面
這里面我們選取的是華為的一款手機(jī)歌憨,看下面代碼:
import requests
url = "https://item.jd.com/3888278.html"
try:
r = requests.get(url)
r.raise_for_status()
r.encoding = r.apparent_encoding
print(r.text[:1000])
except:
print("爬取失敗")
上述代碼可以正常返回HTML數(shù)據(jù),比較簡單柄瑰,沒有任何問題。
百度搜索關(guān)鍵詞提交
百度搜索剪况,大家都知道教沾,有沒有可能用程序自動(dòng)的向這個(gè)搜索引擎提交個(gè)關(guān)鍵詞,并且獲得它的搜索結(jié)果呢译断?
我們?cè)诎俣入S便搜索一個(gè)關(guān)鍵詞授翻,然后查看URL,可以很容易的得到百度搜索的接口:
http://www.baidu.com /s?wd= keyword
只要我們替換keyword就可以向搜索引擎提交關(guān)鍵詞了孙咪。下面我們用requests庫來實(shí)現(xiàn)這個(gè)代碼堪唐,以搜索”Python“關(guān)鍵詞為例。
import requests
keyword = "python"
url = "https://www.baidu.com/s"
try:
kv = {'wd': keyword}
r = requests.get(url, params = kv)
r.raise_for_status()
r.encoding = r.apparent_encoding
print(r.text[:1000])
except:
print("爬取失敗")
其他搜索引擎和百度的搜索方法很類似翎蹈,大家可以嘗試一下淮菠。
網(wǎng)絡(luò)圖片的爬取和存儲(chǔ)
首先,我們看一下網(wǎng)絡(luò)上圖片鏈接的格式杨蛋。網(wǎng)絡(luò)上圖片鏈接基本都是這樣一個(gè)格式:
http://www.example.com/picture.jpg
比如我們隨便在網(wǎng)上找到一個(gè)圖片兜材,右鍵點(diǎn)擊屬性,就可以看到圖片的真實(shí)地址:http://image.nationalgeographic.com.cn/2017/0403/20170403115136772.jpg
我們?nèi)绾瓮ㄟ^圖片URL逞力,把它保存到本地呢曙寡?
我們知道返回的圖片信息是一個(gè)二進(jìn)制格式文件,也就是Response對(duì)象的content屬性寇荧,我們把二進(jìn)制形式寫入到文件就可以了举庶,下面看代碼:
import requests
path = "D:/picture.jpg"
url = "http://image.nationalgeographic.com.cn/2017/0403/20170403115136772.jpg"
r = requests.get(url)
with open(path, 'wb') as f:
f.write(r.content)
通過這樣的方式,我們就把網(wǎng)上的圖片保存到了D盤揩抡,文件名為picture.jpg
户侥。
這段代碼雖然可以實(shí)現(xiàn)我們的想法镀琉,但是有很多問題,比如沒有異常處理蕊唐、文件沒有關(guān)閉屋摔、不能用原始文件名保存圖片等,下面我們給出優(yōu)化后的代碼:
import requests
import os
url = "http://image.nationalgeographic.com.cn/2017/0403/20170403115136772.jpg"
root = "D://pics//"
path = root + url.split('/')[-1]
try:
if not os.path.exists(root):
os.mkdir(root)
if not os.path.exists(path):
r = requests.get(url)
with open(path, 'wb') as f:
f.write(r.content)
f.close()
print("文件保存成功")
else :
print("文件已存在")
except:
print("爬取失敗")
事實(shí)上替梨,除了圖片排序之外钓试,網(wǎng)上有很多的資源,都是類似的url格式副瀑,比如說網(wǎng)上的一個(gè)視頻弓熏,比如說網(wǎng)上的一個(gè)音樂,比如說網(wǎng)上的一個(gè)動(dòng)畫等等糠睡,我們可以用這個(gè)代碼去修改挽鞠,能夠獲取網(wǎng)絡(luò)上得很多的不同的資源。