python爬取拉钩网信息

自己对python爬虫比较感兴趣,使用爬了下拉勾网一些招聘信息并统计出来

1、打开拉勾网进入各招聘信息,比如选着python爬虫的招聘信息,在当前页面按F12,可以查看网页的信息

2、知道信息后开始写代码,我这用的是pycharm 。

     1)爬取信息:

        前提:在mysql数据库中建立相应的库和表。

import requests
import pymysql
import random
import time
import json

# 直接在浏览器查看请求网址及请求头参数
url = 'https://www.lagou.com/jobs/positionAjax.json?needAddtionalResult=false'
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 QIHU 360SE',
    'Cookie': 'user_trace_token=20180716091904-3a769091-8896-11e8-9a9b-525400f775ce; LGUID=20180716091904-3a7693db-8896-11e8-9a9b-525400f775ce; LG_LOGIN_USER_ID=85e6b36b294cf09b2a82093124adf51c41ff7364f82534e5; _ga=GA1.2.1393599455.1531703944; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%221674ae853633e2-019d5fa93b9c51-3c604504-1049088-1674ae85364331%22%2C%22%24device_id%22%3A%221674ae853633e2-019d5fa93b9c51-3c604504-1049088-1674ae85364331%22%7D; WEBTJ-ID=20181204162515-16778523ed3109-0a5052acbff0a7-3c604504-1049088-16778523ed41c5; Hm_lvt_4233e74dff0ae5bd0a3d81c6ccf756e6=1543149992,1543911916; X_HTTP_TOKEN=9ff347da4ea369a0edd5701b5e619fc5; Hm_lvt_dde6ba2851f3db0ddc415ce0f895822e=1543149999,1543911923; _putrc=47050A59BD8A0BB5; JSESSIONID=ABAAABAAADEAAFIDC2DF4242ED8AC49BD143B87A88AAE1E; login=true; unick=%E5%BB%96%E5%9F%B9%E7%82%8E; showExpriedIndex=1; showExpriedCompanyHome=1; showExpriedMyPublish=1; hasDeliver=31; index_location_city=%E5%85%A8%E5%9B%BD; _gid=GA1.2.970223374.1544061772; gate_login_token=ed085e50425284435c14fe4f8f181b01bd377453efc0258f; LGSID=20181206104428-d9e63fa3-f900-11e8-8cd0-525400f775ce; PRE_UTM=; PRE_HOST=; PRE_SITE=https%3A%2F%2Fwww.lagou.com%2F; PRE_LAND=https%3A%2F%2Fwww.lagou.com%2Fzhaopin%2FPython%2F%3FlabelWords%3Dlabel; TG-TRACK-CODE=search_code; _gat=1; LGRID=20181206110812-2ad567bb-f904-11e8-8ce6-5254005c3644; Hm_lpvt_4233e74dff0ae5bd0a3d81c6ccf756e6=1544065694; Hm_lpvt_dde6ba2851f3db0ddc415ce0f895822e=1544065701; SEARCH_ID=da3215be183e441faa0840706b828476',
    'Accept': 'application/json, text/javascript, */*; q=0.01',
    'Connection': 'keep-alive',
    'Host': 'www.lagou.com',
    'Origin': 'https://www.lagou.com',
    'Referer': 'https://www.lagou.com/jobs/list_python%E7%88%AC%E8%99%AB?oquery=Python&fromSearch=true&labelWords=relative'
}

# 连接数据库
db = pymysql.connect(host='localhost', user='root', password='', port=3306, db='lagou')
def add_Mysql(id, name, salary, city, experience, education, company_name,company_status, company_people,):
    # 将数据写入数据库中
    try:
        cursor = db.cursor()
        sql = 'insert into job(id, name, salary, city, experience, education, company_name,company_status, company_people) values ("%d", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s")' % (id, name, salary, city, experience, education, company_name,company_status, company_people)
        print(sql)
        cursor.execute(sql)
        print(cursor.lastrowid)
        db.commit()
    except Exception as e:
        print(e)
        db.rollback()
def get_message():
    for i in range(1, 10):
        print('第' + str(i) + '页')
        time.sleep(random.randint(10, 20))
        data = {
            'first': 'false',
            'pn': i,
            'kd': '数据分析'
        }
        response = requests.post(url, data=data, headers=headers)
        result = json.loads(response.text)
        job_messages = result['content']['positionResult']['result']
        for job in job_messages:
            global count
            count += 1
            # 岗位名称
            name = job['positionName']
            print(job_title)
            # 岗位薪水
            salary = job['salary']
            print(job_salary)
            # 岗位地点
            city = job['city']
            print(job_city)
            # 岗位经验
            experience = job['workYear']
            print(job_experience)
            # 岗位学历
            education = job['education']
            print(job_education)
            # 公司名称
            company_name = job['companyShortName']
            print(company_name)
            # 公司状态
            company_status = job['financeStage']
            print(company_status)
            # 公司规模
            company_people = job['companySize']
            print(company_people)
            # 写入数据库
            add_Mysql(id, name, salary, city, experience, education, company_name,company_status, company_people)
if __name__ == '__main__':
    get_message()

执行之后可以在数据库查看信息,运行的过程也会显示爬出来的信息。

3、对爬出来的结果进行可视化分析。

     1)招聘信息的城市分布:

          这里要使用到第三方库pyecharts,又因为使用的是地图还要地图的信息库

          我们可以直接在ide上装相应的库

          

        点击红框选项在点左上角的+,输入名称,选择安装即可,当然也可用pip安装

     安装好了之后,写代码(其余的效果大同小异)

from pyecharts import Geo
import pandas as pd
import pymysql
#数据库连接
conn = pymysql.connect(host='localhost', user='root', password='', port=3306, db='job' )
cursor = conn.cursor()
sql = "select * from job"
df = pd.read_sql(sql, conn)
city_info = df.groupby(['city']) #这里用groupby求出城市信息
city_com = city_info['city'].agg(['count']) #统计出城市的累计结果
city_com.reset_index(inplace=True) #重置索引
city_com_last = city_com.sort_index() #排序

geo = Geo("城市分布图", title_pos='center', title_top='0', width=800, height=400, title_color="#fff", background_color="#404a59",)
attr = city_com_last['job_city']
value = city_com_last['count']
geo.add("", attr, value, is_visualmap=True, visual_range=[0, 180], visual_text_color="#fff", symbol_size=15)
geo.render("城市分布图.html")

 4、生成效果。

    

另外不同的项生成不同的统计图,我这还有

     这个是参考别人做出来的图

5、总结。

   爬虫有趣,可以学到很多的东西,这个项目使用到很多的第三方库,也有涉及对网页信息的理解,希望能给大家点小帮助吧,最后给一个链接,里面有更好的内容,我也从中学到了很多。

https://github.com/Tobby-star/JOB.git

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是 scrapy 爬取拉钩的步骤: 1. 创建 scrapy 项目 在命令行中输入以下命令来创建 Scrapy 项目: ``` scrapy startproject lagou ``` 其中,`lagou` 是项目名称。 2. 创建爬虫 在项目的根目录下,使用以下命令创建一个爬虫: ``` scrapy genspider lagou_spider www.lagou.com ``` 其中,`lagou_spider` 是爬虫名称,`www.lagou.com` 是要爬取站的域名。 3. 编写爬虫代码 打开 `lagou_spider.py` 文件,将其修改为以下内容: ```python import scrapy class LagouSpider(scrapy.Spider): name = "lagou" allowed_domains = ["www.lagou.com"] start_urls = ["https://www.lagou.com/"] def parse(self, response): pass ``` 我们定义了一个 `LagouSpider` 类,并指定了名称、域名和起始 URL。在 `parse` 方法中,我们暂时没有写任何代码,因为我们需要先分析站的页面结构和数据格式,才能编写爬虫代码。 4. 分析页面结构和数据格式 使用浏览器打开拉钩站,进入搜索职位界面,选择一个职位类型,例如 Python 开发,然后按下搜索按钮。此时,浏览器会跳转到一个新的页面,该页面的 URL 会包含搜索的关键词。例如,搜索 Python 开发,URL 为 `https://www.lagou.com/zhaopin/Python/`。 我们打开浏览器的开发者工具,切换到 Network 选项卡,然后点击搜索按钮。此时,我们会看到浏览器发送了多个请求,其中一个是 `https://www.lagou.com/jobs/positionAjax.json`,该请求返回了搜索结果的 JSON 数据。我们可以点击该请求,然后在 Preview 选项卡中查看数据格式。 我们可以看到,返回的 JSON 数据包含了多个职位的信息,每个职位包含了如下字段: - `companyFullName` 公司全名 - `companyShortName` 公司简称 - `companySize` 公司规模 - `district` 工作地点 - `education` 学历要求 - `financeStage` 融资阶段 - `firstType` 职位类别 - `industryField` 行业领域 - `positionAdvantage` 职位诱惑 - `positionId` 职位ID - `positionName` 职位名称 - `salary` 薪资范围 - `secondType` 职位子类别 - `workYear` 工作经验 现在,我们已经了解了数据的格式,可以开始编写爬虫代码了。 5. 完善爬虫代码 我们需要在 `parse` 方法中,向 `https://www.lagou.com/jobs/positionAjax.json` 发送请求,获取 JSON 数据,并解析数据,提取职位信息。 以下是完整的爬虫代码: ```python import scrapy import json class LagouSpider(scrapy.Spider): name = "lagou" allowed_domains = ["www.lagou.com"] start_urls = ["https://www.lagou.com/"] def parse(self, response): job_types = ["Python", "Java", "PHP", "C++", "C#", "Ruby", "Scala", "Go", "Swift"] for job_type in job_types: url = "https://www.lagou.com/jobs/positionAjax.json?px=default&city=%E5%8C%97%E4%BA%AC&needAddtionalResult=false&isSchoolJob=0" headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.2236.0 Safari/537.36 Edg/114.0.2236.0", "Referer": f"https://www.lagou.com/zhaopin/{job_type}/" } data = { "first": "false", "pn": "1", "kd": job_type } yield scrapy.Request(url=url, method="POST", headers=headers, body=json.dumps(data), callback=self.parse_job_list, meta={"job_type": job_type}) def parse_job_list(self, response): job_type = response.meta["job_type"] result = json.loads(response.text) for job in result["content"]["positionResult"]["result"]: yield { "job_type": job_type, "position_name": job["positionName"], "salary": job["salary"], "company_full_name": job["companyFullName"], "work_year": job["workYear"], "education": job["education"], "job_nature": job["jobNature"], "position_advantage": job["positionAdvantage"] } ``` 在 `parse` 方法中,我们通过循环遍历多个职位类型,向 `https://www.lagou.com/jobs/positionAjax.json` 发送 POST 请求,获取 JSON 数据。我们在请求头中设置了 User-Agent 和 Referer,以便绕过反爬虫机制。我们在请求体中设置了查询参数,其中 `kd` 表示搜索的职位类型。我们使用 `json.dumps` 方法将请求体转换为 JSON 格式,并将结果作为请求体发送。 在 `parse_job_list` 方法中,我们解析了返回的 JSON 数据,并提取了职位信息。我们使用 `yield` 关键字将每个职位信息生成为一个字典,然后交给 Scrapy 引擎处理。 6. 运行爬虫 在命令行中进入项目的根目录,然后输入以下命令,运行爬虫: ``` scrapy crawl lagou -o lagou.json ``` 其中,`-o lagou.json` 表示将爬取的数据保存到 `lagou.json` 文件中。您可以根据需要修改文件名和路径。 7. 结果分析 打开生成的 `lagou.json` 文件,您可以看到爬取到的数据。每个职位信息都包含了职位类型、职位名称、薪资范围、公司全名、工作经验、学历要求、职位性质和职位诱惑等字段。您可以根据需要对数据进行分析和处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值