Python 之 爬虫实战 -- 采集招聘网站数据内容——拉勾网

采集招聘网站数据内容——拉勾网

安装配置详情看上一篇博客

https://www.ivanky.cn/应用记录/207.html

案例实战

(1)Python采集招聘网站数据内容——前程无忧
(2)运行环境

 Python 3 、Pycharm、requests 。 其他内置模块(不需要安装 re json csv),安装 好 python环境就可以了。 

(3)实现步骤

1. 发送请求, 模拟浏览器对于url地址发送请求
2. 获取数据, 获取服务器返回响应数据 开发者工具里面所看到 response 显示内容
3. 解析数据, 提取我们想要的数据内容 招聘岗位基本信息
4. 保存数据, 把数据信息保存表格里面

(4)源码

"""
# 导入数据请求模块
import requests
# 导入正则
import re
# 导入json
import json
# 导入格式化输出模块
from pprint import pprint
# 导入csv模块
import csv
# 导入时间模块
import time
 
# 创建文件
f = open('python多页.csv', mode='a', encoding='utf-8', newline='')
csv_writer = csv.DictWriter(f, fieldnames=[
    '职位名',
    '公司名',
    '城市',
    '区域',
    '薪资',
    '经验',
    '学历',
    '公司规模',
    '公司领域',
    '详情页',
])
# 写入表头
csv_writer.writeheader()
"""
1. 发送请求, 模拟浏览器对于url地址发送请求
    - 需要请求工具 ---> requests
    - 老师, 我英语不好, 可以学习编程吗? 可以学习python吗? 
        单词不需要死记硬背, python常用关键单词词汇 135+左右  
        python常用单词词汇文本
        pycharm 翻译插件 ---> 自己去安装 
        
    - 模拟浏览器
        爬虫模拟浏览器, 都是用请求头... headers 
    - 如果你是VIP学员, 远程安装 解答辅导 都是可以
"""
for page in range(1, 11):
    try:
        # 确定url地址
        time.sleep(1)
        url = f'https://www.lagou.com/wn/jobs?pn={page}&fromSearch=true&kd=python'
        # 模拟浏览器
        headers = {
            # cookie 用户信息, 常用于检测是否登陆账号
            # User-Agent 用户代理, 表示浏览器基本身份标识
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36'
        }
        # 发送请求 --->  <Response [200]> 响应对象 200 状态码 表示请求成功
        response = requests.get(url=url, headers=headers)
        # 2. 获取数据 print(response.text)
        """
        3. 解析数据 ---> re正则表达式  会用 1  不会用 0
            简单的使用re ----> 详细re教学 在系统课程教授2.5个小时左右...
            re.findall('什据么数', 什么地方) re模块findall方法
            从 什么地方 去找什么数据
        
        说字典的同学, 说明你自学, 基础学的不怎么扎实...
            
        """
        html_data = re.findall('<script id="__NEXT_DATA__" type="application/json">(.*?)</script', response.text)[0]
        # 转成字典数据类型 自定变量命名规则, 蛇形命名 驼峰命名 Sad jsonData
        json_data = json.loads(html_data)
        # 字典取值---> 键值对取值 根据冒号左边的内容[键], 提取冒号右边的内容[值]
        result = json_data['props']['pageProps']['initData']['content']['positionResult']['result']
        # for遍历
        for index in result:
            # 详情页
            link = f'https://www.lagou.com/wn/jobs/{index["positionId"]}.html'
            dit = {
                '职位名': index['positionName'],
                '公司名': index['companyFullName'],
                '城市': index['city'],
                '区域': index['district'],
                '薪资': index['salary'],
                '经验': index['workYear'],
                '学历': index['education'],
                '公司规模': index['companySize'],
                '公司领域': index['industryField'],
                '详情页': link,
            }
            job_info = index['positionDetail']
            job_info = re.sub('<.*?>', '', job_info)
            name = index['positionName'] + index['companyFullName']
            name = re.sub(r'[/\:"?*<>\n|]', '', name)
            with open('data\\' + name + '.txt', mode='a', encoding='utf-8') as f:
                f.write(job_info)
                f.write('\n')
                f.write(link)
            # 写入数据
            csv_writer.writerow(dit)
            print(dit)
    except Exception as e:
        print(e)

(5)效果展示
ldtxzu1p.png

END

原文公众号:Python顾木子吖

posted @ 2023-09-18 17:54  Ivan丶ky  阅读(123)  评论(0)    收藏  举报