欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

python爬虫实战以及数据可视化

程序员文章站 2022-03-20 15:40:15
需要准备的环境: (1)python3.8 (2)pycharm (3)截取网络请求信息的工具,有很多,百度一种随便用即可。 第一:首先通过python的sqlalchemy模块,来新建一个表。 第二:通过python中的request模块接口的形式调取数据。 思路:(1)先获取所有城市信息:需要用 ......

需要准备的环境:

 (1)python3.8

 (2)pycharm

 (3)截取网络请求信息的工具,有很多,百度一种随便用即可。

 

第一:首先通过python的sqlalchemy模块,来新建一个表。

 python爬虫实战以及数据可视化

第二:通过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)
需要注意的是:必须利用代理,以及多线程拉取。否则效率低下,可能导致信息不全,时间太慢。

 python爬虫实战以及数据可视化

 第三:将拉取的数据存入表中

  

思路:(1)由于拉取的是json格式,所以解读json格式,也是很繁琐的,需要把要的数据一条一条对应到固定的key里,如图:

  python爬虫实战以及数据可视化

(2)利用session对象的query方法,可以过滤查询想要的数据。
session.query(lagoutables.workyear).filter(lagoutables.crawl_date==self.date).all()

  第四:利用前台模板,将数据可视化。

   

(1)首先需要通过编写js文件,将几个图的数据放在一个方法里提高聚合,抽取出来提高可复用性。        (2)然后通过拼接把获取到的json格式的数据,按key:balue格式分配出来。
代码如下:
利用ajax通信

 

 

 

 

 

 python爬虫实战以及数据可视化

结果展示:

 

 

 

 

python爬虫实战以及数据可视化

主要代码展示:

第一部分:拉取数据。

 (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上下载。

注意:本次爬虫教学并不是本人所原创,只是分享一下学习结果。