1. 程式人生 > >Python網路爬蟲與資訊提取_爬蟲例項(學習筆記)

Python網路爬蟲與資訊提取_爬蟲例項(學習筆記)

慕課課程學習筆記

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模擬向後臺伺服器提交的