python爬蟲實戰以及數據可視化


需要准備的環境:

 (1)python3.8

 (2)pycharm

 (3)截取網絡請求信息的工具,有很多,百度一種隨便用即可。

 

第一:首先通過python的sqlalchemy模塊,來新建一個表。

 

第二:通過python中的request模塊接口的形式調取數據。

  思路:(1)先獲取所有城市信息:需要用request模塊中的【requests.session()】session對象保存訪問接口需要用到的信息:例如cookies等信息。
            (2)通過城市分組,再用正則表達式篩選來獲取python的崗位信息。
其中多次用到列表生成器,以后要多注意這方面的冷知識;不然會有莫名的錯誤。、

代碼思路:只要保證可復用即可,其實很簡單,畢竟Python是一門”干凈“的語言。
       (1)先把請求方法抽集到一個方法中:
      session.get(url(地址),headers(頭信息),,timeout(時間),proxies(代理信息))
       (2)先獲取所有城市,利用列表生成器生成一個list把數據裝進去。
       (3)利用循環以城市分組拉去Python崗位信息。
               for city in lagou.city_list:
調用拉取崗位信息的方法。
       (4)導入multiprocessing模塊,設置多線程加速抓取:multiprocessing.Pool(自定 int or long)
需要注意的是:必須利用代理,以及多線程拉取。否則效率低下,可能導致信息不全,時間太慢。

 

 第三:將拉取的數據存入表中

  

思路:(1)由於拉取的是JSON格式,所以解讀JSON格式,也是很繁瑣的,需要把要的數據一條一條對應到固定的Key里,如圖:

  

(2)利用session對象的query方法,可以過濾查詢想要的數據。
session.query(Lagoutables.workYear).filter(Lagoutables.crawl_date==self.date).all()

  第四:利用前台模板,將數據可視化。

   

(1)首先需要通過編寫JS文件,將幾個圖的數據放在一個方法里提高聚合,抽取出來提高可復用性。        (2)然后通過拼接把獲取到的JSON格式的數據,按key:balue格式分配出來。
代碼如下:
利用Ajax通信

 

 

 

 

 

 

結果展示:

 

 

 

 

主要代碼展示:

第一部分:拉取數據。

 (1)使用session保存cokkies信息。

self.lagou_session = requests.session()

  (2)寫一個request方法;用於請求數據。使用多線程,以及代理的方式來;否則會記錄惡意IP,不能爬蟲。

 

    def handle_request(self,method,url,data=None,info=None):
        while True:
            #加入阿布雲的動態代理
            proxyinfo = "http://%s:%s@%s:%s" % ('H1V32R6470A7G90D', 'CD217C660A9143C3', 'http-dyn.abuyun.com', '9020')
            proxy = {
                "http":proxyinfo,
                "https":proxyinfo
            }
            try:
                if method == "GET":
                    # response = self.lagou_session.get(url=url,headers=self.header,proxies=proxy,timeout=6)
                    response = self.lagou_session.get(url=url,headers=self.header,timeout=6)
                elif method == "POST":
                    # response = self.lagou_session.post(url=url,headers=self.header,data=data,proxies=proxy,timeout=6)
                     response = self.lagou_session.post(url=url,headers=self.header,data=data,timeout=6)
            except:
                # 需要先清除cookies信息
                self.lagou_session.cookies.clear()
                # 重新獲取cookies信息
                first_request_url = "https://www.lagou.com/jobs/list_python?city=%s&cl=false&fromSearch=true&labelWords=&suginput=" % info
                self.handle_request(method="GET", url=first_request_url)
                time.sleep(10)
                continue
            response.encoding = 'utf-8'
            if '頻繁' in response.text:
                print(response.text)
                #需要先清除cookies信息
                self.lagou_session.cookies.clear()
                # 重新獲取cookies信息
                first_request_url = "https://www.lagou.com/jobs/list_python?city=%s&cl=false&fromSearch=true&labelWords=&suginput="%info
                self.handle_request(method="GET",url=first_request_url)
                time.sleep(10)
                continue
            return response.text

  (3)寫一個具體的URL來拉取網頁信息。比如:

   

#獲取全國所有城市列表的方法
    def handle_city(self):
        city_search = re.compile(r'www\.lagou\.com\/.*\/">(.*?)</a>')
        city_url = "https://www.lagou.com/jobs/allCity.html"
        city_result = self.handle_request(method="GET",url=city_url)
        #使用正則表達式獲取城市列表
        self.city_list = set(city_search.findall(city_result))
        self.lagou_session.cookies.clear()

  第二部分:將拉取的數據存入數據庫。

     將數據庫字段與獲取到的JSON數據對應,代碼簡單就不舉例了。

主要是用到數據庫的session信息;通過導包,獲得該數據庫連接的Session對象,然后操作數據庫。

#插入數據
self.mysql_session.add(data)
#提交數據到數據庫
self.mysql_session.commit()

  第三部分:將數據庫數據以Echarts工具展示出來。

   可以查看官網有教學:  https://www.echartsjs.com/zh/index.html

  主要也是去修改js文件,比較簡單;這里就不做示范了。

 

全部代碼,可以去本人的Githup上下載。

注意:本次爬蟲教學並不是本人所原創,只是分享一下學習結果。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM