python爬取多个网页内容——招聘网站

2023-11-03

python爬虫思路:

此次爬虫获取leipin网站上的招聘信息(liepin_ningde)。

首先右击网页——检查——获取网页代码。点击网络,刷新网页,得到网页URL以及请求方法。、

 首先在python环境中安装各种库。

import requests
from faker import Factory
import parsel
import csv
from selenium import webdriver
import time
import random

从网站http://chromedriver.storage.googleapis.com/index.html 中获取与chrome浏览器相对应版本的chromedriver.exe(chrome浏览器版本的获取方式为在浏览器的地址框中输入chrome://version/得到版本号)。

由于我的电脑版本是win10,因此下载下面的32位的文件。 

 将下载好的文件放入python环境中。我的文件路径是:C:\Users\lenovo\anaconda3\Lib\site-packages\selenium\webdriver\chrome。

 环境配置好之后在代码中引入webdriver,代码如下:

driver = webdriver.Chrome('C:\\Users\\lenovo\\anaconda3\\Lib\\site-packages\\selenium\\webdriver\\chrome\\chromedriver.exe')
driver.get('https://www.liepin.com/company-jobs/8768998/')
driver.implicitly_wait(10)
time.sleep(2)

 首先获取一个岗位详细信息页面的链接。可用以下按钮得到岗位的详细链接。

 

由于该页面的详细链接在job-detail-box类下的a模块,并且链接的属性是href。因此代码如下:

(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)
    #url_list_all.append(url)
print(type(url_list))

以上 url_list是ningde页面下的第一个页面中所有岗位详细信息的链接。通过换页观察不同页下链接的规律,以此获得所有页面下的岗位详细信息的所有链接。(在这里代码获取了4页),并将获得的每一页的链接放在url_list_all中。

url_list_all = url_list
for i in range(2,5):
    driver_1 = webdriver.Chrome(
        'C:\\Users\\lenovo\\anaconda3\\Lib\\site-packages\\selenium\\webdriver\\chrome\\chromedriver.exe')
    driver_1.get('https://www.liepin.com/company-jobs/8768998/pn'+str(i)+'/')
    url_list_1 = driver_1.find_elements_by_css_selector('.job-detail-box a')
    url_list_all = url_list_all + url_list_1
    #url_list_all = set(url_list_all)
    for index_1 in url_list_1:
        url_1 = index_1.get_attribute('href')
        print(url_1)
        #url_list_all.append(url_1)
    print(len(url_list_1))

 接着获取每个岗位详细信息下的

['职位名', '薪资', '城市', '经验', '学历', '福利', '岗位标签', '公司', '详情页','岗位介绍']

并将这些信息写入到csv文件中另外将岗位的名称、岗位介绍以及详情页链接写入到txt文本中。

在页面中指中信息,就可得到具体的信息,::text表示文本,get()表示获取,只有一个信息用get(),获取多个信息用getall()(如福利待业和岗位标签)。

 

具体代码信息如下:

f = open('data\\CATL_job.csv', mode="a", encoding='utf-8', newline='')
# 写入表头
csv_writer = csv.DictWriter(f, fieldnames=['职位名', '薪资', '城市', '经验', '学历', '福利', '岗位标签', '公司', '详情页','岗位介绍'])
csv_writer.writeheader()
for index in url_list_all:
    per_url = index.get_attribute('href')
   # time.sleep(random.randint(1,2))

    Fact = Factory.create()
    ua = Fact.user_agent()
    headers = {'User-Agent':ua}

    # 发送请求
    response = requests.get(url=per_url, headers=headers)

    # 获取数据
    # print(response.text)

    # 解析数据,提取我们想要的数据内容
    # 把获取下来的html字符串<response.text>转成可解析对象
    selector = parsel.Selector(response.text)
    title = selector.css('.job-apply-content .name-box .name::text').get()  # '.job-apply-content .name-box .name'定位标签
    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()  # 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 = selector.css('.job-apply-container-desc .labels span::text').getall()  # 福利#getall()获取所有标签,返回列表
    # 把列表合并成字符串
    labels_char = ','.join(labels)
    job_keys = ','.join(selector.css('.job-intro-container .tag-box ul li::text').getall())
    # print(title,salary,city,exp,edu,labels)
    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())
    print(title, salary, city, exp, edu, labels_char, job_keys, company, job_info)

    # 把数据写到字典里面
    dit = {'职位名': title, '薪资': salary, '城市': city, '经验': exp, '学历': edu,
           '福利': labels_char, '岗位标签': job_keys, '公司': company, '详情页': per_url,'岗位介绍':job_info}

    # 创建文件

    # 写入数据
    # 写入表头

    csv_writer.writerow(dit)
    # 保存岗位
    file = f'data\\job_information.txt'
    with open(file, mode='a', encoding="utf-8")as w:
        w.write(str(title))
        w.write(job_info)
        w.write('\n')
        w.write(per_url)
        w.write('\n')

以下是一些代码的信息解释,如想详细了解需要自行百度或者系统化学习。

#导入数据请求模块
#前期pip install requests
import requests

#导入faker
from faker import Factory
#随机生成ua(换不同的浏览器身份请求,反爬)
Fact = Factory.create()
ua = Fact.user_agent()


#请求url地址.右击网页,检查,网络
url = ''

#模拟伪装.把python代码伪装成浏览器发送请求,,目的是为了防止被反爬
headers = {
#User-Agent 用户代理,表示浏览器基本身份信息(开发者工具里面复制粘贴)
'User-Agent': }(其中ua可以复制粘贴,也可以随机生成)

#发送请求
response = requests.get(url = url,headers = headers)
print(response)
#返回response [200] 表示请求成功


#获取数据
print(resopnse.text)#获取响应的文本数据,返回字符串数据类型 html字符串数据内容


#解析数据(css选择器  根据标签属性提取数据提取)
import parsel

#把获取下来的html字符串数据内容<resopnse.text>转成可解析对象
selector = parsel.Selector(response.text)
#selector.css(‘定位标签’)
#css是按照标签来的。ctrl+F可以通过字符串选择器找寻定位数据
title = selector.css('.job-apply-content .name-box .name::text').get()
print(title)


#保存数据,把数据保存本地文件
  #基本数据保存在csv表格里面
  #岗位职责保存在文本里面
import csv #内置模块
#创建文件
f = open('data.csv',mode = 'a',encoding = 'utf-8',newline = '')#a是追加保存,newline是换行符
csv.DictWriter(f,fieldnames = [])
#把数据写入到字典里面
dit = {
'职位名':title
。。。。。
}

selenium:模拟人的行为去操作浏览器

#导入自动化测试模块
from selenium import webdriver
import time
#selenium模拟人的行为操作浏览器
#1、打开浏览器
driver = webdriver.Chrome()
#2、访问网站
driver.get('网址')
#隐式等待,让网页数据加载完成
driver.implicitly_wait(10)
time.sleep(3)
#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)
    

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python爬取多个网页内容——招聘网站 的相关文章

随机推荐

  • dz安装好后css js位置错误,Discuz!X3.2安装后无法加载CSS/Js文件

    今天在服务器上安装了Discuz X3 2 数据库等填写正确 下一步很快就新建了291张表完成安装 没有任何报错出现 完成后访问前台和后台却无法加载CSS Js文件 F12查看它直接访问的网站根目录下边 这CSS Js文件明明不在根目录啊
  • AcWing 1293. 夏洛克和他的女朋友 二分图

    题 是一个二分图染色 质数不是质数的质因子 因为质数不会有因子 所以质数全是颜色1 合数不是合数的质因子 因为合数不 质 所以合数全都是颜色2 n小于3的时候只有1种颜色 其他都是2种颜色 include
  • 计算机网络教程_复习整理第一章

    计算机网络教程 复习整理第一章 第一章 概述 第二章 物理层 第三章 数据链路层 文章目录 计算机网络教程 复习整理第一章 1 因特网 因特网的标准制定流程 2 电路交换 报文交换 分组交换 区分三者 3 计算机网络的性能指标 lt 速率
  • d3dcompiler_43.dll缺失怎么修复

    有网友在玩游戏时出现 无法启动程序 因为计算机中丢失d3dcompiler 43 dll 尝试重新安装该程序以解决问题 的提示 那么是什么原因造成丢失d3dcompiler 43 dll呢 缺少d3dcompiler 43 dll文件怎么办
  • GLUE数据集介绍:RTE、MRPC、SST-2、QNLI、MNLI、QQP

    自然语言处理 NLP 主要包括自然语言理解 NLU 和自然语言生成 NLG 为了让NLU任务发挥最大的作用 来自纽约大学 华盛顿大学等机构创建了一个多任务的自然语言理解基准和分析平台 也就是GLUE General Language Und
  • SpringBoot注解

    使用注解的优势 1 采用纯java代码 不在需要配置繁杂的xml文件 2 在配置中也可享受面向对象带来的好处 3 类型安全对重构可以提供良好的支持 4 减少复杂配置文件的同时亦能享受到springIoC容器提供的功能 一 注解详解 配备了完
  • HIve中的查询语句

    文章目录 Hive中的查询语句 1 基础语法 2 基本查询 Select From 2 1 数据准备 0 原始数据 1 创建部门表 2 创建员工表 3 导入数据 2 2 全表和特定列查询 1 全表查询 2 选择特定列查询 2 3 列别名 1
  • kafka相关操作命令

    kafka相关操作命令 原文链接 https blog csdn net wf3612581 article details 81842574 1 开启zookeeper集群 startzk sh 2 开启kafka集群 start kaf
  • 【修电脑】VMware 从GHO文件备份恢复Win10/Win7系统

    修电脑 VMware 从GHO文件备份恢复Win10 Win7系统 注意 参考 硬盘知识 一 硬盘接口的分类 二 硬盘的分类 按照硬盘材质分为两大类 按照接口类型区分 boot启动知识 Legacy BIOS引导 uefi引导启动流程 查看
  • 区块链关键机制分析

    区块链中三大关键机制 密码算法 1 Hash算法 2 非对称加密算法 3 数字签名 存储结构 共识机制 1 工作量证明 POW 2 权益证明 POS 3 股份授权证明 DPOS 4 实用拜占庭容错 PBFT 5 Raft算法 6 Rippl
  • ubuntu18.04升级cmake

    下载cmake cmake官网 https cmake org download sudo apt get install y build essential libssl dev wget https github com Kitware
  • C++ 的 decltype 详细介绍

    1 基本介绍 decltype 是 C 11 新增的一个用来推导表达式类型的关键字 和 auto 的功能一样 用来在 编译时期 进行自动类型推导 引入 decltype 是因为 auto 并不适用于所有的自动类型推导场景 在某些特殊情况下
  • 大数据学习连载03篇:分布式技术(集群、负载、弹性、故障等知识点)

    分布式技术 一 为什么需要分布式 1 计算问题 无论是我们在学校刚开始学编程 还是在刚参加工作开始处理实际问题 写出来的程序都是很简单的 因为面对的问题很简单 以处理数据为例 可能只是把一个几十K的文件解析下 然后生成一个词频分析的报告 很
  • 怎么debug_装完机电脑点不亮怎么办?不妨看看你主板上的Debug灯

    Hello大家好 我是兼容机之家的小牛 如果你加入了一个电脑硬件爱好者的群 那么你肯定会发现一件事 那就是每天都会有小白装机点不亮在群里求助 问群问了大半天也没弄好 小牛今天来教你一个窍门 能快速判断好自己的电脑到底出了什么故障 既然你自己
  • Python实战项目:flask人脸识别图书系统(上)

    flask人脸识别图书系统 上 涉及内容 爬虫 开发 数据分析 a 前端界面的技术 gt jquery bootstrap b 后面逻辑 gt flask 前后端半分离技术 使用模块 flask 蓝图 blue print c 收集的图书数
  • Qt 5.9.7的安装及配置环境变量

    1 安装 Qt 5 9的安装跟以前的版本略有不同 选择组件时分成Qt 5 9和Tools 注意此时要勾选Qt 5 9下的MinGW 安装空间会一下增大4G左右 果断差评 不然后面通过QtCreator编译时无法添加选项 Tools下面也有一
  • AndroidKiller安装-配置-更新apktool

    下载安装好AndroidKiller后 需要对其进行配置以及更新apktool 接下来我就为大家讲解详细操作流程 1 选择配置选项 2 选择java然后配置好jdk的工程路径 切记要给到bin目录下才可以 如果是第一次打开并没有配置jdk目
  • Kamil and Making a Stream【Codeforces Round #588 (Div. 2) E】【dfs + map】

    Codeforces 1230 E 也没怎么读题 就看了下样例的note就知道了是对树上的直系祖先对子结点的链上gcd求和 然后就可以直接这样去跑一遍 个人比较的喜欢踩坑 有正着走的不走 偏偏选择了从根节点返回回来的答案 这样的做法虽然上是
  • 二叉树:链式存储结构基础操作(C语言)

    操作包含 1 二叉树的构造 先序序列和中序序列 中序序列和后序序列 2 利用三种遍历方式输出 先序遍历 中序遍历 后序遍历 层次遍历 每种遍历包含递归和非递归两种算法 3 栈和队列的构造 C 模板 均为顺序存储结构 main cpp 1 构
  • python爬取多个网页内容——招聘网站

    python爬虫思路 此次爬虫获取leipin网站上的招聘信息 liepin ningde 首先右击网页 检查 获取网页代码 点击网络 刷新网页 得到网页URL以及请求方法 首先在python环境中安装各种库 import requests