需要准备的环境:
(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方法;用于请求数据。使用多线程,以及代理的方式来;否则会记录恶意IPpython数据可视化实战,不能爬虫。
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(met
试看结束,如继续查看请付费↓↓↓↓
打赏0.5元才能查看本内容,立即打赏
来源【首席数据官】,更多内容/合作请关注「辉声辉语」公众号,送10G营销资料!
版权声明:本文内容来源互联网整理,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 jkhui22@126.com举报,一经查实,本站将立刻删除。