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

爬虫实战--采集招聘网站数据内容——猎聘

基础讲解

模块安装统一讲解:

win + R 输入cmd 输入安装命令 pip install 模块名

 - 如果安装python第三方模块:
        1. win + R 输入 cmd 点击确定, 输入安装命令 pip install 模块名 (pip install requests) 回车
        2. 在pycharm中点击Terminal(终端) 输入安装命令
    - 安装失败原因:
        - 失败一: pip 不是内部命令
            解决方法: 设置环境变量

        - 失败二: 出现大量报红 (read time out)
            解决方法: 因为是网络链接超时,  需要切换镜像源
                清华:https://pypi.tuna.tsinghua.edu.cn/simple
                阿里云:https://mirrors.aliyun.com/pypi/simple/
                中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/
                华中理工大学:https://pypi.hustunique.com/
                山东理工大学:https://pypi.sdutlinux.org/
                豆瓣:https://pypi.douban.com/simple/
                例如:pip3 install -i https://pypi.doubanio.com/simple/ 模块名

        - 失败三: cmd里面显示已经安装过了, 或者安装成功了, 但是在pycharm里面还是无法导入
            解决方法: 可能安装了多个python版本 (anaconda 或者 python 安装一个即可) 卸载一个就好
                    或者你pycharm里面python解释器没有设置好

如何配置pycharm里面的python解释器?

  1. 选择file(文件) >>> setting(设置) >>> Project(项目) >>> python interpreter(python解释器)
  2. 点击齿轮, 选择add
  3. 添加python安装路径

pycharm如何安装插件?

  1. 选择file(文件) >>> setting(设置) >>> Plugins(插件)
  2. 点击 Marketplace 输入想要安装的插件名字 比如:翻译插件 输入 translation / 汉化插件 输入 Chinese
  3. 选择相应的插件点击 install(安装) 即可
  4. 安装成功之后 是会弹出 重启pycharm的选项 点击确定, 重启即可生效

案例实战

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

Python3、Pycharm。

第三方库:requests >>> pip install requests 数据请求 

selenium >>> pip install selenium==3.141.0 自动化测试 操作浏览器 

parsel >>> pip install parsel 数据解析 提取数据 

faker >>> pip install faker 随机生成UA

csv 保存数据 保存csv文件

time 时间模块 

random 随机模块

(3)实现步骤

    1. 发送请求, 模拟浏览器对 url地址 发送请求
        url地址: https://www.liepin.com/job/1948917627.shtml?d_sfrom=search_prime&d_ckId=null&d_curPage=2&d_pageSize=40&d_headId=null&d_posi=1&skId=s5h3mfxh8n1c3ec3dr7nnc6d4lycb9db&fkId=s5h3mfxh8n1c3ec3dr7nnc6d4lycb9db&ckId=s5h3mfxh8n1c3ec3dr7nnc6d4lycb9db&sfrom=search_job_pc&curPage=2&pageSize=40&index=1
    2. 获取数据, 获取服务器返回响应数据
        开发者工具: response
    3. 解析数据, 提取我们想要的数据内容
        岗位基本数据信息:
    4. 保存数据, 把数据保存本地文件
        - 基本数据 保存csv表格里面
        - 岗位职责 保存文本里面

(4)源码-主程序

# 导入数据请求模块 --> 第三方模块 需要安装 pip install requests
import requests
# 导入faker --> 第三方模块 需要安装 pip install 导入faker
from faker import Factory
# 导入数据解析模块 --> 第三方模块 需要安装 pip install parsel
import parsel
# 导入csv模块  内置模块 不需要安装
import csv
# 导入自动化测试模块
from selenium import webdriver
# 导入时间模块
import time
# 导入随机模块
import random

"""
selenium: 模拟人的行为去操作浏览器
"""
# 1. 打开浏览器
driver = webdriver.Chrome()
# 2. 访问网站
driver.get(
    'https://www.liepin.com/zhaopin/?city=410&dq=410&pubTime=&currentPage=2&pageSize=40&key=python%E7%88%AC%E8%99%AB&suggestTag=&workYearCode=0&compId=&compName=&compTag=&industry=&salary=&jobKind=&compScale=&compKind=&compStage=&eduLevel=&otherCity=&scene=input&suggestId=')
# 隐式等待 ---> 让网页数据加载完成
driver.implicitly_wait(10)
time.sleep(3)

# 创建文件
f = open('data.csv', mode='a', encoding='utf-8', newline='')
csv_writer = csv.DictWriter(f, fieldnames=[
    '职位名',
    '薪资',
    '城市',
    '经验',
    '学历',
    '福利',
    '岗位标签',
    '公司名',
    '详情页',
])
# 写入表头
csv_writer.writeheader()

# 3. 获取岗位详情页url地址
url_list = driver.find_elements_by_css_selector('.job-detail-box a')
for index in url_list:
    url = index.get_attribute('href')
    print(url)
    time.sleep(random.randint(1, 2))
    """
    1. 发送请求, 模拟浏览器对 url地址 发送请求
        - 把python代码伪装成浏览器发送请求
            目的: 为了防止被反爬
    """
    # 请求url地址
    # url = 'https://www.liepin.com/job/1948917627.shtml?d_sfrom=search_prime&d_ckId=null&d_curPage=2&d_pageSize=40&d_headId=null&d_posi=1&skId=s5h3mfxh8n1c3ec3dr7nnc6d4lycb9db&fkId=s5h3mfxh8n1c3ec3dr7nnc6d4lycb9db&ckId=s5h3mfxh8n1c3ec3dr7nnc6d4lycb9db&sfrom=search_job_pc&curPage=2&pageSize=40&index=1'
    # 模拟伪装  ---> 开发者工具里面进行复制粘贴
    Fact = Factory.create()
    # 随机生成UA
    ua = Fact.user_agent()
    headers = {
        # User-Agent 用户代理 表示浏览器基本身份信息
        'User-Agent': ua
    }
    # 发送请求 ->  <Response [200]> 表示请求成功
    response = requests.get(url=url, headers=headers)
    """
    2. 获取数据, 获取服务器返回响应数据
        开发者工具: response
        response.text 获取响应文本数据, 返回字符串数据类型 html字符串数据内容
    3. 解析数据, 提取我们想要的数据内容

        css选择器 根据标签属性提取数据内容:
    """
    # 把获取下来 html字符串数据内容 <response.text> 转成可解析对象
    selector = parsel.Selector(response.text)
    """
    .job-apply-content .name-box .name 定位标签
        - get() 获取第一个标签 就获取一个内容 返回字符串
        - getall 获取所有标签内容, 返回列表

    css选择器, 在系统课程 都是从头到尾讲2.5个小时才能讲完知识点内容

    a::text 表示 提取a标签里面文本呀
    """
    title = selector.css('.job-apply-content .name-box .name::text').get()  # 职位名
    salary = selector.css('.job-apply-content .name-box .salary::text').get()  # 薪资
    city = selector.css('.job-apply-content .job-properties span:nth-child(1)::text').get()  # 城市
    exp = selector.css('.job-apply-content .job-properties span:nth-child(3)::text').get()  # 经验
    edu = selector.css('.job-apply-content .job-properties span:nth-child(5)::text').get()  # 学历
    # 把列表合并成字符串
    labels = ','.join(selector.css('.job-apply-container-desc .labels span::text').getall())  # 福利
    job_labels = ','.join(selector.css('.tag-box ul li::text').getall())  # 职位标签
    company = selector.css('.company-info-container .company-card .content .name::text').get()  # 公司名
    job_info = '\n'.join(selector.css('.job-intro-container .paragraph dd::text').getall())  # 岗位职业
    """
    4. 保存数据, 把数据保存本地文件
        - 基本数据 保存csv表格里面
        - 岗位职责 保存文本里面

    """
    # 把数据写入到字典里面
    dit = {
        '职位名': title,
        '薪资': salary,
        '城市': city,
        '经验': exp,
        '学历': edu,
        '福利': labels,
        '岗位标签': job_labels,
        '公司名': company,
        '详情页': url,
    }
    # 写入数据
    csv_writer.writerow(dit)
    print(title, salary, city, exp, edu, labels, job_labels, company, job_info)
    file = f'data\\{company}_{title}.txt'
    with open(file, mode='a', encoding='utf-8') as w:
        w.write(job_info)
        w.write('\n')
        w.write(url)

(5)效果展示
ldtxoxst.png
ldtxp2ob.png

END

原文公众号:Python顾木子吖

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