Python網路爬蟲與資訊提取_爬蟲例項(學習筆記)
阿新 • • 發佈:2018-12-20
慕課課程學習筆記
1. 京東商品頁面的爬取
1.採用get()方法,獲取Response物件;
import requests
url = 'https://item.jd.com/100000947807.html'
r = requests.get(url)
print(r.status_code)
r.status_code狀態碼為200,獲取成功。
2.採用encoding,檢視編碼
print(r.encoding)
結果:gbk
說明從頁面的頭部分就可以解析頁面的編碼資訊
全程式碼
import requests
url = "https://item.jd.com/100000304401.html"
try:
r = requests.get(url)
r.raise_for_status()
r.encoding = r.apparent_encoding
print(r.text[:1000])
except:
print("爬取失敗")
其中 r.raise_for_status()在方法內部判斷r.status_code是否等於200,不需要增加額外的if語句,該語句便於利用try‐except進行異常處理
2. 亞馬遜商品頁面的爬取
第一步,狀態碼為503,訪問出現錯誤
url = "https://www.amazon.cn/gp/product/B01M8L5Z3Y"
r = requests.get(url)
print(r.status_code)
第二步,檢視編碼,改變編碼
print(r.encoding)
r.encoding = r.apparent_encoding#改成可以閱讀的相關編碼,utf-8
print(r.encoding)
r.text
網站對爬蟲限制
robot協議
對網站訪問的頭,來檢視是不是爬蟲
第三步,檢視頭
print(r.request.headers)
在request中,告訴訪問來自用request庫;因此需要模擬瀏覽器訪問
第四步,模擬瀏覽器訪問
kv = {'uers-agent':'Mozilla/5.0'}
Mozilla/5.0:標準的瀏覽器的身份表示欄位
kv = {'uers-agent':'Mozilla/5.0'}
r = requests.get(url,headers=kv)
檢視狀態訪問成功;
全程式碼:
url = "https://www.amazon.cn/dp/B07GVXHCXH/ref=zg_bsnr_books_1?_encoding=UTF8&psc=1&refRID=R1EE4EWH03FPE6V7K9HY"
try:
kv = {'user-agent':'Mozilla/5.0'}
r = requests.get(url,headers = kv)
r.raise_for_status()
r.encoding = r.apparent_encoding
print(r.text[1000:2000])
except:
print('爬取失敗')
3. 百度與360搜素關鍵詞提交
搜尋關鍵詞介面
http://www.baidu.com/s?wd=Python
全程式碼:
keyword = "Python"
try:
kv = {'wd':keyword}#kv = {'q':keyword}
r = requests.get("http://www.baidu.com/s",params=kv)
print(r.request.url)
r.raise_for_status()
print(len(r.text))
except:
print("爬取失敗")
4. 圖片爬取
全程式碼:
import os
url = 'http://image.nationalgeographic.com.cn/2015/0121/20150121033625957.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)#content處理二進位制
f.close()
print("檔案儲存成功")
else:
print("檔案已經存在")
except:
print("爬取失敗")
IP地址歸屬地的自動查詢
全程式碼:
url = "http://m.ip138.com/ip.asp?ip="
try:
r = requests.get(url+'202.204.80.112')
r.raise_for_status()
r.encoding = r.apparent_encoding
print(r.text[-500:])
except:
print("爬取失敗")
網站人機互動形式,是通過連結提交的,則可以通過python模擬向後臺伺服器提交的