python爬虫requests实战_Python爬虫之requests库网络爬取简单实战
實例1:直接爬取網頁
實例2 : 構造headers,突破訪問限制,模擬瀏覽器爬取網頁
實例3 : 分析請求參數,構造請求參數爬取所需網頁
實例4: 爬取圖片
實例5: 分析請求參數,構造請求參數爬取所需信息
實例1:京東商品頁面的爬取
image.png
現在我們利用requests庫爬取這個頁面的商品信息
首先引入requests庫
import requests
然后爬取頁面
r =requests.get("https://item.jd.com/4645290.html")
然后我們測試狀態碼,編碼和內容
r.status_code
r.encoding
r.text[:1000]
image.png
到此,說明我們已經成功利用requests庫獲取到了商品頁面的信息。
完整的爬取代碼
import requests
url = "https://item.jd.com/4645290.html"
try:
r = requests.get(url)
r.raise_for_status()
r.encoding = r.apparent_encoding
print(r.text[:1000])
except:
print("爬取失敗")
實例2 : 亞馬遜商品頁面爬取
我們選取如下界面進行爬取
image.png
首先,我們按照之前的步驟進行爬取
引入requests庫,然后get,判斷status_code
r = requests.get("https://www.amazon.cn/dp/B0011F7WU4/ref=s9_acss_bw_cg_JAVA_1a1_w?m=A1AJ19PSB66TGU&pf_rd_m=A1U5RCOVU0NYF2&pf_rd_s=merchandised-search-6&pf_rd_r=D9MK8AMFACZGHMFJGRXP&pf_rd_t=101&pf_rd_p=f411a6d2-b2c5-4105-abd9-69dbe8c05f1c&pf_rd_i=1899860071")
r.status_code
顯示503,說明服務器錯誤,
503 (服務不可用) 服務器目前無法使用(由于超載或停機維護)。 通常,這只是暫時狀態。
我們查看編碼發現
r.encoding
'ISO-8859-1'
我們需要轉換編碼
r.encoding = r.apparent_encoding
然后顯示爬取內容,發現
image.png
發現出現了錯誤。
網頁告訴我們出現了錯誤,但只要我們正確獲取到了網頁的內容,就說明網路方面肯定是沒有錯誤的。這說明亞馬遜對爬蟲有限制,一般對爬蟲限制的話,就是robots協議,其中還可以對訪問對象進行限制,限制只能通過相應的瀏覽器訪問,而限制爬蟲的訪問。
我們通過request.header查看我們發給亞馬遜的請求頭部到底是什么內容
image.png
我們看到信息中的user-agent的信息是python。這說明我們的程序誠實的告訴亞馬遜,這個程序是python的requests庫發起的請求。
亞馬遜的服務器看到這是個爬蟲請求,所以就返回錯誤的信息。
那么我們如何才能訪問呢?
我們都知道requests庫可以更改請求的頭部信息,我們可以模擬一個瀏覽器的請求
我們構造一個鍵值對
kv = {'user-agent':'Mozilla/5.0'}
url = "https://www.amazon.cn/dp/B0011F7WU4/ref=s9_acss_bw_cg_JAVA_1a1_w?m=A1AJ19PSB66TGU&pf_rd_m=A1U5RCOVU0NYF2&pf_rd_s=merchandised-search-6&pf_rd_r=D9MK8AMFACZGHMFJGRXP&pf_rd_t=101&pf_rd_p=f411a6d2-b2c5-4105-abd9-69dbe8c05f1c&pf_rd_i=1899860071"
r = requests.get(url, headers = kv)
我們查看狀態碼,發現為200,說明這一次成功獲取到了頁面的內容
image.png
完整的爬取代碼
import requests
url = "https://www.amazon.cn/dp/B0011F7WU4/ref=s9_acss_bw_cg_JAVA_1a1_w?m=A1AJ19PSB66TGU&pf_rd_m=A1U5RCOVU0NYF2&pf_rd_s=merchandised-search-6&pf_rd_r=D9MK8AMFACZGHMFJGRXP&pf_rd_t=101&pf_rd_p=f411a6d2-b2c5-4105-abd9-69dbe8c05f1c&pf_rd_i=1899860071"
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搜索關鍵詞提交爬蟲
搜索關鍵詞提交的接口:
https://www.baidu.com/s?ie=UTF-8&wd=keyword
通過requests的params參數,構造查詢參數
完整的代碼
import requests
keyword = "劉德華"
url = "http://www.baidu.com/s?ie=UTF-8"
try:
kv = {"wd":keyword}
r = requests.get(url, params = kv)
print(r.request.url)
r.raise_for_status()
print(len(r.text))
print(r.text)
except:
print("爬取失敗")
實例4 網絡圖片的爬取和存儲
網絡中圖片連接的格式
http://www.example.com/picture.jpg
假設我們現在要爬取
http://www.nationalgeographic.com.cn/
圖片連接:
http://image.nationalgeographic.com.cn/2015/0121/20150121033625957.jpg
完整的爬取代碼:
import requests
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)
f.close()
print("文件保存成功")
else :
print("文件已存在")
except:
print("爬取失敗")
實例5 IP地址歸屬地查詢
我們分析它請求的過程,發現它的請求接口就是在地址后附加參數,類似于百度搜索
http://m.ip138.com/ip.asp?ip=125.220.159.160
所以我們可以構造查詢參數,發送給服務器,然后獲取返回的結果
完整代碼
import requests
url = "http://m.ip138.com/ip.asp?"
ip = "125.220.159.160"
kv = {"ip":ip}
try:
r = requests.get(url, params = kv)
r.raise_for_status()
r.encoding = r.apparent_encoding
print(r.text)
except:
print("爬取失敗")
總結
以上是生活随笔為你收集整理的python爬虫requests实战_Python爬虫之requests库网络爬取简单实战的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mybatis-plus分页查询_Spr
- 下一篇: python中print的用法_pyth