如何用Python爬取数据以及整理数据可视化,面试必学

时间:2024-04-11 18:47:28

需要准备的环境:

 (1)python3.8

 (2)pycharm

 (3)截取网络请求信息的工具,有很多,百度一种随便用即可。
如何用Python爬取数据以及整理数据可视化,面试必学

这里还要注意:不管你是为了Python就业还是兴趣爱好,记住:项目开发经验永远是核心,如果你没有2020最新python入门到高级实战****,可以去小编的Python交流.裙 :七衣衣九七七巴而五(数字的谐音)转换下可以找到了,里面很多新python教程项目,还可以跟老司机交流讨教!

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

 如何用Python爬取数据以及整理数据可视化,面试必学

第二:通过python中的request模块接口的形式调取数据。

1

2

3

4

5

6

7

8

9

10

11

12

13

  思路:(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

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

  如何用Python爬取数据以及整理数据可视化,面试必学

1

2

2)利用session对象的query方法,可以过滤查询想要的数据。

session.query(Lagoutables.workYear).filter(Lagoutables.crawl_date==self.date).all()

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

   

1

2

3

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

代码如下:

利用Ajax通信

 

 

 

 

 

 如何用Python爬取数据以及整理数据可视化,面试必学

结果展示:
如何用Python爬取数据以及整理数据可视化,面试必学

主要代码展示:

 

第一部分:拉取数据。

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

self.lagou_session = requests.session()

  (2)写一个request方法;用于请求数据。使用多线程,以及代理的方式来;否则会记录恶意IP,不能爬虫。

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

def handle_request(self,method,url,data=None,info=None):

    while True:

        #加入阿布云的动态代理

        proxyinfo = "http://%s:%[email protected]%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来拉取网页信息。比如:

   

1

2

3

4

5

6

7

8

#获取全国所有城市列表的方法

    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对象,然后操作数据库。

1

2

3

4

#插入数据

self.mysql_session.add(data)

#提交数据到数据库

self.mysql_session.commit()

  第三部分:将数据库数据以Echarts工具展示出来。
最后注意:不管你是为了Python就业还是兴趣爱好,记住:项目开发经验永远是核心,如果你没有2020最新python入门到高级实战****,可以去小编的Python交流.裙 :七衣衣九七七巴而五(数字的谐音)转换下可以找到了,里面很多新python教程项目,还可以跟老司机交流讨教!
本文的文字及图片来源于网络加上自己的想法,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。