需要准备的环境:
(1)python3.8
(2)pycharm
(3)截取网络请求信息的工具,有很多,百度一种随便用即可。
第一:首先通过python的sqlalchemy模块,来新建一个表。
第二:通过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 ) 需要注意的是:必须利用代理,以及多线程拉取。否则效率低下,可能导致信息不全,时间太慢。 |
第三:将拉取的数据存入表中
1 | 思路:( 1 )由于拉取的是JSON格式,所以解读JSON格式,也是很繁琐的,需要把要的数据一条一条对应到固定的Key里,如图: |
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通信 |
结果展示:
主要代码展示:
第一部分:拉取数据。
(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:%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来拉取网页信息。比如:
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工具展示出来。
可以查看官网有教学: https://www.echartsjs.com/zh/index.html
主要也是去修改js文件,比较简单;这里就不做示范了。
全部代码,可以去本人的Githup上下载。
注意:本次爬虫教学并不是本人所原创,只是分享一下学习结果。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix