echarts mysql scrapy_抓取58job, 赶集job以及智联招聘,并使用数据分析生成echarts图...
**抓取58job, 趕集job以及智聯(lián)招聘,并使用數(shù)據(jù)分析生成echarts圖**
爬蟲部分
爬蟲部分使用scrapy-redis分布式爬蟲,通過redis實現(xiàn)增量爬取以及去重,并將所有的數(shù)據(jù)直接保存到redis中,后續(xù)再做處理
github:https://github.com/AndrewAndrea/spider_work
代碼已經(jīng)提交到GitHub中,不是很完善,爬蟲爬取的信息沒有詳情頁的數(shù)據(jù),只有趕集網(wǎng)的數(shù)據(jù)是詳情頁的。有點懶得寫了。
可以自己把代碼clone下來,在做完善。
抓取智聯(lián)招聘的信息
這個很簡單
抓取58同城的招聘信息
這個也很簡單,我的代碼只做了一個城市的抓取,可以做擴展
抓取趕集網(wǎng)的招聘信息
這個也簡單。就不說了,也是一個城市的信息。
最后關(guān)于爬蟲如何同時啟動多個spider
如何將所有的爬蟲的同時啟動,這個我寫一下,記錄一下,避免以后給忘了。
首先,需要在爬蟲文件新建一個commond包,在該目錄下新建文件crawlall.py。
目錄結(jié)構(gòu):
crawlall.py中的內(nèi)容:
#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time : 2019/5/6 16:31# @Author : zhao.jia# @Site :# @File : crawlall.py# @Software: PyCharmfromscrapy.commands importScrapyCommand
classCommand(ScrapyCommand):
requires_project = Truedefsyntax(self):
return'[options]'defshort_desc(self):
return'Runs all of the spiders'defrun(self,args,opts):
spider_list = self.crawler_process.spiders.list()
forname inspider_list:
self.crawler_process.crawl(name,**opts.__dict__)
self.crawler_process.start()
更改settings.py
COMMANDS_MODULE = 'spider_work.command'
啟動
scrapy crawlall
爬蟲部分到此結(jié)束,單個如何啟動大家也都知道。
可以擴張的地方很多,所以再補充幾點:
1、詳細的招聘信息的抓取
2、可以將代碼直接改成通用爬蟲
3、58job和趕集網(wǎng)的都是同城的,可以擴展到全國,寫個配置文件,拼接URL就行。可以分別根據(jù)每個網(wǎng)站做關(guān)鍵詞搜索爬蟲,而不是單一使用智聯(lián)的關(guān)鍵詞。
4、增加異常處理
5、增加數(shù)據(jù)去重存到 redis 中
數(shù)據(jù)轉(zhuǎn)換部分(可以忽略)
我是通過 MySQL 去做的,所以需要將 Redis 中的數(shù)據(jù)取出來存到 MySQL 中。
Redis 存儲的類型是列表,所以有重復(fù)數(shù)據(jù)。redis 取數(shù)據(jù)采用 lpop 方法。通過給 MySQL 表中的字段加索引,來去重,插入語句使用 replace into 而不是 insert into。?可以去百度一下,看看博客。
process_item_mysql.py
#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time : 2019/4/29 23:15# @Author : zhao.jia# @Site :# @File : process_item_mysql.py# @Software: PyCharmimportpymysql
importredis
importjson
defprocess_item(key):
Redis_conn = redis.StrictRedis(host='ip',port=6379,db=0,password='pass')
MySql_conn = pymysql.connect(host='ip',user='root',passwd='pass',port=3306,db='zhaopin')
cur = MySql_conn.cursor()
while True:
data = Redis_conn.lpop(key)
ifdata:
try:
data = json.loads(data.decode('unicode_escape'),strict=False)
exceptExceptionase:
process_item(key)
print(data)
try:
if'-'indata['city']:
city = data['city'].split('-')[0]
else:
city = data['city']
exceptExceptionase:
city = data['city']
lis = (
pymysql.escape_string(data['jobType']),pymysql.escape_string(data['jobName']),pymysql.escape_string(data['emplType']),pymysql.escape_string(data['eduLevel']),pymysql.escape_string(data['salary']),pymysql.escape_string(data['companyName']),pymysql.escape_string(city),pymysql.escape_string(data['welfare']),pymysql.escape_string(data['workingExp']))
sql = (
"replace into work(jobType, jobName, emplType, eduLevel, salary, companyName, city, welfare, workingExp) VALUES ('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s')"% lis)
try:
cur.execute(sql)
MySql_conn.commit()
exceptExceptionase:
MySql_conn.rollback()
else:
breakcur.close()
MySql_conn.close()
if__name__ == "__main__":
key_list = ['job_spider:items','jobs58:items','jobsganjispider']
fori inrange(3):
process_item(key_list[i])
可視化部分
可視化采用的flask+mysql+echarts
具體代碼見我的GitHub,這里就不貼了。
貼一下幾個圖吧
web網(wǎng)站的整體圖
搜索界面
學(xué)歷要求
學(xué)歷工資圖
經(jīng)驗要求
詞云圖
完成
項目中可以擴展的部分很多,需要大家自己去寫,不用再搭架子寫簡單的東西,web部分也可以擴展,包括頁面以及echarts圖,數(shù)據(jù)分析都可以繼續(xù)擴展。
代碼中有任何問題都可以留言,指正。一塊學(xué)習(xí)!
代碼會放在我GitHub上,關(guān)注后回復(fù) ‘work’,即可獲取
總結(jié)
以上是生活随笔為你收集整理的echarts mysql scrapy_抓取58job, 赶集job以及智联招聘,并使用数据分析生成echarts图...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 字节增强java_提高byte的效率
- 下一篇: java格式错误什么意思_java.io