爬蟲Python-Requests庫實戰,爬取京東商品信息,學習發送請求

編程語言 Python 網絡爬蟲 京東 奔跑的小賣鋪 奔跑的小賣鋪 2017-09-16

當前學習目標,通過實戰學習爬蟲的基本使用,怎樣獲取網頁內容、怎樣進行請求、怎樣保存圖片

京東商品信息

網址:https://item.jd.com/4586850.html

import requestsr = requests.get('https://item.jd.com/4586850.html')print (r.status_code)r.encoding = r.apparent_encodingprint(r.text)

亞馬遜商品信息

網址:https://www.amazon.cn/ref=nav_logo

r = requests.get('https://www.amazon.cn/ref=nav_logo')print (r.status_code)r.encoding = r.apparent_encodingprint(r.text)

輸出之後發現鏈接報錯503

一些網站會對網絡爬蟲做一些限制,限制無外乎兩種:

一種是通過Robots協議告知爬蟲那些東西可以訪問,那些不能

一種是通過判斷對網站訪問的HTTP的頭部來判斷請求是不是由一個爬蟲來引起的,網站只接受瀏覽器的請求,而對爬蟲引起的請求,通常是拒絕的。

print(r.request.headers){'User-Agent': 'python-requests/2.18.4', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'}很明顯,我們這裡的請求頭是python的Requests庫發起的。

模仿瀏覽器的請求

獲取heard頭部,右擊網頁 -> 檢查 -> 選擇Network -> 點開一條鏈接 ->查看heard頭,User-Agent:是瀏覽器的信息,我們通過更改User-Agent來模仿瀏覽器訪問

#添加瀏覽器信息kv = {'user-agent':'Mozilla/5.0'}r = requests.get('https://www.amazon.cn/ref=nav_logo',headers=kv)print(r.status_code)r.encoding = r.apparent_encodingprint(r.text)

百度、360搜索提交

百度搜索:http://www.baidu.com/s?wd=keyword

360搜索: https://www.so.com/s?q=keyword 我們只要通過替換keyword就能達到搜索的目的

kv = {'wd':'python'}r = requests.get('http://www.baidu.com/s',params=kv)print(r.url)kv = {'q':'python'}r = requests.get('https://www.so.com/s',params=kv)print(r.url)

網絡圖片的爬取和存儲

以國家地理網為例:

http://www.nationalgeographic.com.cn/

其中一個web頁面的圖片

http://image.nationalgeographic.com.cn/2017/0714/20170714021939332.jpg

獲取圖片簡單例子:

#輸出的圖片路徑,注意這裡需要給圖片起名成path = "/Users/dym/Desktop/123.jpg"url = 'http://image.nationalgeographic.com.cn/2017/0714/20170714021939332.jpg'r = requests.get(url)with open(path,'wb') as f: f.write(r.content) f.close() #r.content:代理返回數據的二進制形式,所以我們可以通過r.content寫入文件 

使用URL的圖片名稱:

# coding=utf-8import requestsimport osurl = 'http://image.nationalgeographic.com.cn/2017/0714/20170714021939332.jpg'root = '/Users/dym/Desktop/'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('爬取失敗')#path:根路徑root + 截取url中的圖片名稱

相關推薦

推薦中...