c 抓取网页数据(爬虫如何同时启动多个.py可视化部分可视化采用方法 )

优采云 发布时间: 2021-11-23 18:22

  c 抓取网页数据(爬虫如何同时启动多个.py可视化部分可视化采用方法

)

  **爬取58job、赶集job和智联招聘,用数据分析生成echarts地图**

  履带部分

  爬虫部分使用scrapy-redis分布式爬虫,通过redis实现增量爬取和去重,将所有数据直接保存到redis中进行后续处理

  github:

  代码已经提交到GitHub,不是很完整。爬虫抓取的信息没有详情页的数据,只有赶集网的数据才是详情页。有点懒得写了。

  您可以自己克隆代码并改进它。

  获取智联招聘招聘信息

  

  这很简单

  抓取58个城市的招聘信息

  

  这个也很简单,我的代码只爬了一个城市,可以扩展

  爬取赶集网的招聘信息

  

  这个也很简单。不用说,它也是一个城市的信息。

  最后,如何同时启动多个蜘蛛

  如何同时启动所有爬虫,这个我会写出来,记录下来,免得日后忘记。

  首先需要在爬虫文件中创建一个commond包,并在该目录下新建一个文件crawlall.py。

  目录结构:

  crawlall.py 中的内容:

  #!/usr/bin/env python

# -*- coding: utf-8 -*-

# @Time : 2019/5/6 16:31

# @Author : zhao.jia

# @Site :

# @File : crawlall.py

# @Software: PyCharm

from scrapy.commands import ScrapyCommand

class Command(ScrapyCommand):

requires_project = True

def syntax(self):

return '[options]'

def short_desc(self):

return 'Runs all of the spiders'

def run(self, args, opts):

spider_list = self.crawler_process.spiders.list()

for name in spider_list:

self.crawler_process.crawl(name, **opts.__dict__)

self.crawler_process.start()

  更改设置.py

  COMMANDS_MODULE = 'spider_work.command'

  启动

  scrapy crawlall

  爬虫部分到此结束,大家都知道如何开始一个。

  可以扩展的地方很多,再补充几点:

  1、 详细招聘信息爬取

  2、可以直接把代码改成通用爬虫

  3、58job和赶集网同城,可以推广到全国。写个配置文件,拼接网址就行了。可以根据每个网站分别做关键词搜索爬虫,而不是单独使用智联的关键词。

  4、添加异常处理

  5、向redis添加数据去重

  数据转换部分(可忽略)

  我是通过mysql来做的,所以需要把redis里面的数据取出来存到mysql中。

  Redis存储的类型是列表,所以存在重复数据。Redis 使用 lpop 方法来获取数据。通过向 MySQL 表中的字段添加索引以删除重复,insert 语句使用 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: PyCharm

import pymysql

import redis

import json

def process_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)

if data:

try:

data = json.loads(data.decode('unicode_escape'), strict=False)

except Exception as e:

process_item(key)

print(data)

try:

if '-' in data['city']:

city = data['city'].split('-')[0]

else:

city = data['city']

except Exception as e:

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()

except Exception as e:

MySql_conn.rollback()

else:

break

cur.close()

MySql_conn.close()

if __name__ == "__main__":

key_list = ['job_spider:items', 'jobs58:items', 'jobsganjispider']

for i in range(3):

process_item(key_list[i])

  可视化部分

  Flask+mysql+echarts 用于可视化

  具体代码见我的GitHub,这里就不贴了。

  发几张图

  网站整体图网站

  

  搜索界面

  

  学术要求

  

  教育薪资表

  

  经验要求

  

  词云插图

  

  结束

  项目中有很多可以扩展的部分。你需要自己写。你不再需要写简单的东西了。web part也可以扩展,包括页面和echarts图表,数据分析可以继续扩展。

  

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线