利用Python爬去囧網福利(多線程、urllib、request)

來源:互聯網
上載者:User

標籤:二進位   get   mys   lte   head   請求   寫入   self   socket   

import os;import urllib.request;import re;import threading;# 多線程from urllib.error import URLError#接收異常‘s 模組#擷取網站的源碼class QsSpider:    #init 初始化建構函式 .self本身    def __init__(self):      self.user_agent=‘Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36‘      self.header = {‘User-Agent‘:self.user_agent}      self.url = ‘http://www.qiubaichengren.net/%s.html‘      self.save_dir = ‘./img‘      self.page_num = 20  #page num#擷取網站原始碼    def load_html(self,page):        try:            web_path = self.url % page            request = urllib.request.Request(web_path,headers=self.header)            with urllib.request.urlopen(request) as f:                html_content = f.read().decode(‘gbk‘)                #print(html_content)                self.pick_pic(html_content)        except URLError as e :            print(e.reason) #異常原因    #download    def sava_pic(self,img):        save_path = self.save_dir + "/" +img.replace(‘:‘,‘@‘).replace(‘/‘,‘_‘)        if not os.path.exists(self.save_dir):            os.makedirs(self.save_dir)        print(save_path)        urllib.request.urlretrieve(img,save_path)    #filter    def pick_pic(self,html_content):        patren = re.compile(r‘src="(http:.*?\.(?:jpg|png|gif))‘)        pic_path_list = patren.findall(html_content)        for i in pic_path_list:           #print(i)           self.sava_pic(str(i))    #mamy threading    def start(self):        for i in range(1,self.page_num):            thread = threading.Thread(target=self.load_html,args=str(i))            thread.start()# main voidspider = QsSpider()spider.start()

一、爬蟲流程:

1、發起請求

使用http庫向目標網站發起請求,即發送一個Request

Request包含:要求標頭、請求體等 

Request模組缺陷:不能執行JS 和CSS 代碼

 

2、擷取響應內容

如果伺服器能正常響應,則會得到一個Response

Response包含:html,json,圖片,視頻等

 

3、解析內容

解析html資料:Regex(RE模組),第三方解析庫如Beautifulsoup,pyquery等

解析json資料:json模組

解析位元據:以wb的方式寫入檔案

 

4、儲存資料

資料庫(MySQL,Mongdb、Redis)

檔案

 

二、響應Response

1、響應狀態代碼

  200:代表成功

  301:代表跳轉

  404:檔案不存在

  403:無許可權訪問

  502:伺服器錯誤

 

三、http協議 請求與響應

 

Request:使用者將自己的資訊通過瀏覽器(socket client)發送給伺服器(socket server)

Response:伺服器接收請求,分析使用者發來的請求資訊,然後返回資料(返回的資料中可能包含其他連結,如:圖片,js,css等)

ps:瀏覽器在接收Response後,會解析其內容來顯示給使用者,而爬蟲程式在類比瀏覽器發送請求然後接收Response後,是要提取其中的有用資料。

 

四、結果(福利)

 

利用Python爬去囧網福利(多線程、urllib、request)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.