python数据分析实例:利用爬虫获取数据

2023-11-11

我们在工作中用到网络上发布的各种信息,如果用搜索引擎查找并整理,需要花费大量时间,现在python能够帮助我们,使用爬虫技术,提高数据查找和整理的效率。

我们来找一个爬虫的案例——抓取求职招聘类网站中的数据。使用环境:win10+python3+Juypter Notebook

第一步:分析网页

第一步:分析网页

要爬取一个网页,首先分析网页结构。

现在很多网站都用Ajax(异步加载)的技术,打开网页,先给你看上面一部分东西,然后剩下的东西再慢慢加载。所以你可以看到很多网页,都是慢慢的刷出来的,或者有些网站随着你的移动,很多信息才慢慢加载出来。这样的网页有个好处,就是网页加载速度特别快。

但这个技术是不利于爬虫的爬取的,我们可以借助chrome浏览器的小工具进行分析,进入网络分析界面,界面如下:
在这里插入图片描述
这时候是一片空白,我们刷新一下,就可以看到一系列的网络请求了。
在这里插入图片描述
然后我们就开始找可疑的网页资源。首先,图片,css什么之类的可以跳过,一般来说,关注点放在xhr这种类型请求上,如下:
在这里插入图片描述
这类数据一般都会用json格式,我们也可以尝试在过滤器中输入json,来筛选寻找。
在这里插入图片描述

上图发现了两个xhr请求,从字面意思看很有可能是我们需要的信息,右键点击,在另一个界面打开。

我们可以在右边的框中,切换到“Preview”,然后点content——positionResult查看,能看到是关于职位的信息,以键值对的格式呈现,这就是json格式,特别适合网页数据交换。

第二步,网址构造

在“Headers”中,看到网页地址,通过观察网页地址可以发现推测出:http://www.lagou.com/jobs/positionAjax.json?这一段是固定的,剩下的我们发现有个city=%E5%8C%97%E4%BA%AC&needAddtionalResult=false&isSchoolJob=0

再查看请求发送参数列表,到这里我们可以肯定city参数便是城市,pn参数便是页数,kd参数便是职位关键字。

再来看看关于职位,一共有30页,每页有15个数据,所以我们只需要构造循环,遍历每一页的数据。

第三步,编写爬虫脚本写代码

需要说明的是因为这个网页的格式是用的json,那么我们可以用json格式很好的读出内容。这里我们切换成到preview下,然后点content——positionResult——result,可以发现出先一个列表,再点开就可以看到每个职位的内容。为什么要从这里看?有个好处就是知道这个json文件的层级结构,方便等下编码。

具体代码展示:

import requests,json
from openpyxl import Workbook

#http请求头信息
headers={
'Accept':'application/json, text/javascript, */*; q=0.01',
'Accept-Encoding':'gzip, deflate, br',
'Accept-Language':'zh-CN,zh;q=0.8',
'Connection':'keep-alive',
'Content-Length':'25',
'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8',
'Cookie':'user_trace_token=20170214020222-9151732d-f216-11e6-acb5-525400f775ce; LGUID=20170214020222-91517b06-f216-11e6-acb5-525400f775ce; JSESSIONID=ABAAABAAAGFABEF53B117A40684BFB6190FCDFF136B2AE8; _putrc=ECA3D429446342E9; login=true; unick=yz; showExpriedIndex=1; showExpriedCompanyHome=1; showExpriedMyPublish=1; hasDeliver=0; PRE_UTM=; PRE_HOST=; PRE_SITE=; PRE_LAND=https%3A%2F%2Fwww.lagou.com%2F; TG-TRACK-CODE=index_navigation; Hm_lvt_4233e74dff0ae5bd0a3d81c6ccf756e6=1494688520,1494690499,1496044502,1496048593; Hm_lpvt_4233e74dff0ae5bd0a3d81c6ccf756e6=1496061497; _gid=GA1.2.2090691601.1496061497; _gat=1; _ga=GA1.2.1759377285.1487008943; LGSID=20170529203716-8c254049-446b-11e7-947e-5254005c3644; LGRID=20170529203828-b6fc4c8e-446b-11e7-ba7f-525400f775ce; SEARCH_ID=13c3482b5ddc4bb7bfda721bbe6d71c7; index_location_city=%E6%9D%AD%E5%B7%9E',
'Host':'www.lagou.com',
'Origin':'https://www.lagou.com',
'Referer':'https://www.lagou.com/jobs/list_Python?',
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36',
'X-Anit-Forge-Code':'0',
'X-Anit-Forge-Token':'None',
'X-Requested-With':'XMLHttpRequest'
}


def get_json(url, page, lang_name):
    data = {'first': "true", 'pn': page, 'kd': lang_name,'city':"北京"}

#POST请求
    json = requests.post(url,data,headers=headers).json()
    list_con = json['content']['positionResult']['result']
    info_list = []
for i in list_con:
        info = []
        info.append(i['companyId'])
        info.append(i['companyFullName'])
        info.append(i['companyShortName'])
        info.append(i['companySize'])
        info.append(str(i['companyLabelList']))

        info.append(i['industryField'])
        info.append(i['financeStage'])

        info.append(i['positionId'])
        info.append(i['positionName'])
        info.append(i['positionAdvantage'])
#         info.append(i['positionLables'])

        info.append(i['city'])        
        info.append(i['district'])
#         info.append(i['businessZones'])

        info.append(i['salary']) 
        info.append(i['education'])         
        info.append(i['workYear'])    
        info_list.append(info)
return info_list


def main():
    lang_name = input('职位名:')
    page = 1
    url = 'http://www.lagou.com/jobs/positionAjax.json?needAddtionalResult=false'
    info_result=[]  
    title = ['公司ID','公司全名','公司简称','公司规模','公司标签','行业领域','融资情况',"职位编号", "职位名称","职位优势","城市","区域","薪资水平",'教育程度', "工作经验"]    
    info_result.append(title)  

#遍历网址  
    while page < 31:
        info = get_json(url, page, lang_name)
        info_result = info_result + info
        page += 1
#写入excel文件
        wb = Workbook()
        ws1 = wb.active
        ws1.title = lang_name
for row in info_result:
            ws1.append(row)
        wb.save('职位信息3.xlsx')


main()

打开excel文件,查看数据是否存取成功:
在这里插入图片描述
我们看到关于招聘类网站中抓取的数据,被成功的保存在excel表格中。

关于Python技术储备

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

朋友们如果需要这份完整的资料可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】

一、Python学习大纲

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
在这里插入图片描述

二、Python必备开发工具

在这里插入图片描述

三、入门学习视频

四、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。在这里插入图片描述

五、python副业兼职与全职路线

在这里插入图片描述

在这里插入图片描述

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

python数据分析实例:利用爬虫获取数据 的相关文章

  • 如何手动计算分类交叉熵?

    当我手动计算二元交叉熵时 我应用 sigmoid 来获取概率 然后使用交叉熵公式并平均结果 logits tf constant 1 1 0 1 2 labels tf constant 0 0 1 1 1 probs tf nn sigm
  • 保存为 HDF5 的图像未着色

    我目前正在开发一个将文本文件和 jpg 图像转换为 HDF5 格式的程序 用HDFView 3 0打开 似乎图像仅以灰度保存 hdf h5py File Sample h5 img Image open Image jpg data np
  • Django 的内联管理:一个“预填充”字段

    我正在开发我的第一个 Django 项目 我希望用户能够在管理中创建自定义表单 并向其中添加字段当他或她需要它们时 为此 我在我的项目中添加了一个可重用的应用程序 可在 github 上找到 https github com stephen
  • Python getstatusoutput 替换不返回完整输出

    我发现了这个很棒的替代品getstatusoutput Python 2 中的函数在 Unix 和 Windows 上同样有效 不过我觉得这个方法有问题output被构建 它只返回输出的最后一行 但我不明白为什么 任何帮助都是极好的 def
  • 跟踪 pypi 依赖项 - 谁在使用我的包

    无论如何 是否可以通过 pip 或 PyPi 来识别哪些项目 在 Pypi 上发布 可能正在使用我的包 也在 PyPi 上发布 我想确定每个包的用户群以及可能尝试积极与他们互动 预先感谢您的任何答案 即使我想做的事情是不可能的 这实际上是不
  • 删除flask中的一对一关系

    我目前正在使用 Flask 开发一个应用程序 并且在删除一对一关系中的项目时遇到了一个大问题 我的模型中有以下结构 class User db Model tablename user user id db Column db String
  • Python zmq SUB 套接字未接收 MQL5 Zmq PUB 套接字

    我正在尝试在 MQL5 中设置一个 PUB 套接字 并在 Python 中设置一个 SUB 套接字来接收消息 我在 MQL5 中有这个 include
  • 独立滚动矩阵的行

    我有一个矩阵 准确地说 是 2d numpy ndarray A np array 4 0 0 1 2 3 0 0 5 我想滚动每一行A根据另一个数组中的滚动值独立地 r np array 2 0 1 也就是说 我想这样做 print np
  • Pandas Merge (pd.merge) 如何设置索引和连接

    我有两个 pandas 数据框 dfLeft 和 dfRight 以日期作为索引 dfLeft cusip factorL date 2012 01 03 XXXX 4 5 2012 01 03 YYYY 6 2 2012 01 04 XX
  • Python beautifulsoup 仅限 1 级文本

    我看过其他 beautifulsoup 得到相同级别类型的问题 看来我的有点不同 这是网站 我正试图拿到右边那张桌子 请注意表的第一行如何展开为该数据的详细细分 我不想要那个数据 我只想要最顶层的数据 您还可以看到其他行也可以展开 但在本例
  • 如何在不丢失注释和格式的情况下更新 YAML 文件 / Python 中的 YAML 自动重构

    我想在 Python 中更新 YAML 文件值 而不丢失 Python 中的格式和注释 例如我想改造 YAML 文件 value 456 nice value to value 6 nice value 界面类似于 y yaml load
  • 在Python中检索PostgreSQL数据库的新记录

    在数据库表中 第二列和第三列有数字 将会不断添加新行 每次 每当数据库表中添加新行时 python 都需要不断检查它们 当 sql 表中收到的新行数低于 105 时 python 应打印一条通知消息 警告 数量已降至 105 以下 另一方面
  • 如何通过索引列表从 dask 数据框中选择数据?

    我想根据索引列表从 dask 数据框中选择行 我怎样才能做到这一点 Example 假设我有以下 dask 数据框 dict A 1 2 3 4 5 6 7 B 2 3 4 5 6 7 8 index x1 a2 x3 c4 x5 y6 x
  • pyspark 将 twitter json 流式传输到 DF

    我正在从事集成工作spark streaming with twitter using pythonAPI 我看到的大多数示例或代码片段和博客是他们从Twitter JSON文件进行最终处理 但根据我的用例 我需要所有字段twitter J
  • Cython 和类的构造函数

    我对 Cython 使用默认构造函数有疑问 我的 C 类 Node 如下 Node h class Node public Node std cerr lt lt calling no arg constructor lt lt std e
  • Jupyter Notebook 找不到 Python 模块

    不知道发生了什么 但每当我使用 ipython 氢 原子 或 jupyter 笔记本时都找不到任何已安装的模块 我知道我安装了 pandas 但笔记本说找不到 我应该补充一点 当我正常运行脚本时 python script py 它确实导入
  • 使用特定颜色和抖动在箱形图上绘制数据点

    我有一个plotly graph objects Box图 我显示了箱形 图中的所有点 我需要根据数据的属性为标记着色 如下所示 我还想抖动这些点 下面未显示 Using Box我可以绘制点并抖动它们 但我不认为我可以给它们着色 fig a
  • 根据列 value_counts 过滤数据框(pandas)

    我是第一次尝试熊猫 我有一个包含两列的数据框 user id and string 每个 user id 可能有多个字符串 因此会多次出现在数据帧中 我想从中导出另一个数据框 一个只有那些user ids列出至少有 2 个或更多string
  • Python ImportError:无法导入名称 __init__.py

    我收到此错误 ImportError cannot import name life table from cdc life tables C Users tony OneDrive Documents Retirement retirem
  • 实现 XGboost 自定义目标函数

    我正在尝试使用 XGboost 实现自定义目标函数 在 R 中 但我也使用 python 所以有关 python 的任何反馈也很好 我创建了一个返回梯度和粗麻布的函数 它工作正常 但是当我尝试运行 xgb train 时它不起作用 然后 我

随机推荐

  • 复变函数第三章-复变函数的积分

    3 复变函数的积分 3 1 概念 3 2 柯西 古萨基本定理 3 3 复合闭路定理 3 4 原函数与不定积分 3 5 柯西积分公式 3 6 解析函数的高阶导数 3 7 调和函数 3 复变函数的积分 3 1 概念 闭曲线积分 Cf z dz
  • React是什么,React的优点、缺点

    React是什么 React的优点 缺点 与Vue对比 在React源码中的React哲学里有这样一句话 我们认为 React是用JavaScript构建快速响应的大型的Web应用程序的首选方案 由此可见 关键在于快速响应 大型web应用
  • 为了一张图

    我的作业图
  • Quartus系列:Quartus II 功能仿真设置流程

    1 新建一个波形文件 2 右键点击Name下空白框 在弹出的菜单中选择 Inert gt Insert Node or Bus 如果已经知道端口名称和端口类型 直接在弹出的对话框中键入Name后 相应的信息会自动识别到对话框中 如下 如果不
  • MVVM模式下,ViewModel和View,Model有什么区别

    摘自正美的5群 Model 很简单 就是业务逻辑相关的数据对象 通常从数据库映射而来 我们可以说是与数据库对应的model View 也很简单 就是展现出来的用户界面 基本上 绝大多数软件所做的工作无非就是从数据存储中读出数据 展现到用户界
  • Java EnumSet allOf()方法具有什么功能呢?

    转自 Java EnumSet allOf 方法具有什么功能呢 下文笔者讲述Java中EnumSet allOf 方法的功能简介说明 如下所示 EnumSet allOf 方法的功能 返回枚举集合中所有的值 EnumSet allOf 方法
  • 【附源码】用手写数字字母为例,演示“一行代码不写,完成大多数分类任务”

    基于MATLAB 2021a 录制的深度学习之图像分类 新手保姆级入门课程 就算是小学生跟着操作都能懂了 掌握了这个 很多分类任务都是换汤不换药了 一行代码不写就可以完成手写数字和字母共计36类图片的分类 按照此方法 理论上可以一行代码不写
  • Web小白基础教程-第三篇-HTML基础常用标签名(一)

    谈起Html就不得不简单说一说Web网页制作 Web标准的构成分为三个部分 HTML CSS和JavaScript 三层分离 互相独立 HTML Web的结构部分 通俗点来说就是Web页面上的元素和内容 CSS Web的表现部分 通俗点来说
  • java 使用redis记录logback日志,由自定义Appender与Jedis的使用实现。

    需求 1 获取日志的产生的线程名称 记录器名称 上下文产生时间 日志发生时间 自定义日志的信息 2 将获取的信息以json的形式保存到redis中 思路 1 配置logback使用自定义Appender实现 来获取对应的日志信息 2 配置一
  • C盘中哪些文件可以删除?

    C盘中哪些文件可以删除 第一大类 所有带 开头和结尾的隐藏文件都可以删 这类文件一般都是升级系统留下的卸载程序 占用空间非常大且无大用 因此删除掉并不会对系统造成任何影响 不过这类文件都是隐藏文件 因此要找到必需在 文件夹选项 检查 中开启
  • vue2.0生命周期—码虫

    1 下面是我对生命周期的一些理解 首先我们先看一下Vue生命周期图 2 它可以分为八个阶段 钩子函数 函数描述 beforeCreate 组件实例刚被创建 组件属性计算之前 如data属性等 created 组件实例创建完成 属性已绑定 但
  • 播放4K视频需要什么样的配置

    我们知道 相对于标清视频和高清视频 HD 4K视频是一个新的高度 4K分辨率属于超高清分辨率 在此分辨率下 观众将可以看清画面中的每一个细节 每一个特写 影院如果采用4096 2160分辨率 无论在影院的哪个位置 观众都可以清楚地看到画面的
  • 人脸识别引擎SeetaFaceEngine简介及在windows7 vs2013下的编译

    SeetaFaceEngine是开源的C 人脸识别引擎 无需第三方库 它是由中科院计算所山世光老师团队研发 它的License是BSD 2 SeetaFaceEngine库包括三个模块 人脸检测 detection 面部特征点定位 alig
  • cookie、localStorage、sessionStorage区别 == JavaScript中let、const、var 的区别 == es6解构赋值

    cookie localStorage sessionStorage区别 Cookie Cookie设计初衷是用来和服务器通讯 而不是本地存储 他只是被 借用 到本地存储 如下图 每次http请求 header都携带cookie local
  • background-position设置无效问题解决

    2019独角兽企业重金招聘Python工程师标准 gt gt gt html代码部分 div class login div reg1 div
  • Yolov4部署到ZYNQ系列2-重新训练darknet框架下的Yolov4

    文章目录 前言 一 为什么重新训练darknet 二 改进Yolov4结构 1 其他如常 2 修改cfg文件 3 加快运行 三 改进Yolov4结构后的推测效果 总结 前言 花了一个月不到的时间单枪匹马把Yolov4模型部署到ZYNQ Ul
  • 基于Matlab的直方图、Retinex和暗通道图像去雾算法

    基于Matlab的直方图 Retinex和暗通道图像去雾算法 近年来 图像去雾技术在计算机视觉领域得到了广泛关注 由于大气雾霾和环境污染等因素 图像中会存在大量的噪点和雾霭 甚至会导致一些细节无法清晰地呈现 针对这个问题 本文将介绍一种基于
  • Kubernetes 使用 helm 部署 NFS Provisioner

    文章目录 1 介绍 2 预备条件 3 部署 nfs 4 部署 NFS subdir external provisioner 4 1 集群配置 containerd 代理 4 2 配置代理堡垒机通过 kubeconfig 部署 部署 Min
  • 使用python装饰器计算函数运行时间的实例

    使用python装饰器计算函数运行时间的实例 装饰器在python里面有很重要的作用 如果能够熟练使用 将会大大的提高工作效率 今天就来见识一下 python 装饰器 到底是怎么工作的 本文主要是利用python装饰器计算函数运行时间 一些
  • python数据分析实例:利用爬虫获取数据

    我们在工作中用到网络上发布的各种信息 如果用搜索引擎查找并整理 需要花费大量时间 现在python能够帮助我们 使用爬虫技术 提高数据查找和整理的效率 我们来找一个爬虫的案例 抓取求职招聘类网站中的数据 使用环境 win10 python3