1. 程式人生 > >urllib3下簡單爬蟲的建立流程。

urllib3下簡單爬蟲的建立流程。

Y25

# 匯入urllib3模組,os檔案操作模組,time時間模組
import urllib3, os, time
# 匯入lxml庫中的額etree,方便解析資料
from lxml import etree
# 匯入程序池
from multiprocessing import Pool

# 建立網路請求物件
http = urllib3.PoolManager()
# 禁用urllib3警告(urllib3在進行https請求時,可能會丟擲對應的警告,可以設定disable_warnings禁用對應的警告)
urllib3.disable_warnings()
# 模擬瀏覽器訪問網頁
header = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36', 'Content-type':'text/json'} # 定義函式完成網路資料爬取(可傳入回撥函式和網路連結,或者直接傳入網路連結) def get_net_data(url, method='get', callBack=None): # 傳送網路請求 response = http.request(
method,url,headers=header, retries=5) # 回撥函式不為空,返回對應資料 if callBack is not None: callBack(response.data) # 只傳入網路連結的下,直接利用etree方法,解析提取html頁面資料的方式。轉化為節點樹的方式 else: return etree.HTML(response.data) # 定義函式完成頁面資料下載 def download_page(url): # 呼叫get_net_data函式爬取對應網站資料 data =
get_net_data(url) # 根據對應的節點路徑表示式來選取網頁中的節點或節點集 srcs = data.xpath("//ul[@class='new-img']/ul/li/a/img/@src") titles = data.xpath("//ul[@class='new-img']/ul/li/a/@title") for j in range(len(srcs)): os.mkdir('img/{0}'.format(titles[j])) response = http.request('get',srcs[j],headers=header) f = open('img/{0}/{1}'.format(titles[j],srcs[j].split('-')[-1]),'wb+') f.write(response.data) print('第%s張下載完成'%j) f.close() # 設定主程序 if __name__ == '__main__': url = "http://www.7160.com/yulebagua/" # 建立程序池,實現多個程序同步執行的操作,並且方便管理多程序。(實現5個程序同時執行任務) pool = Pool(5) # apply_async用來向程序池中新增一個非同步執行的程序。 apply則用來向程序池中新增一個同步執行的融程序。 pool.apply_async(download_page, args=(url,)) # 關閉程序池,一旦程序池呼叫close操作,此後,程序池不再接受任何程序任務。 pool.close() # 設定主程序等待子程序任務執行完畢 pool.join()

結果展示: 在這裡插入圖片描述

個人小結,定有不足,歡迎指點。 謝謝~