我用python疯狂爬取公司数据

news2025/3/1 2:41:05

在这里插入图片描述
我是半路从一个纯小白学过来的,学习途中也掉过许多坑,在这里建议新手要先把基础打扎实,然后再去学习自己需要的内容,不要想着全部学完再用,那样你是永远学不完的,用哪方面就学习哪方面的内容,不要贪多哟。

我当初想到学python是为了能在工作中提升工作效率(另一个也是兴趣),还有就是python入门快。相信大多数小伙伴也是这个原因才学python的。

python的关键词很少,入门很简单,但是想要深入还是要去用心去研究的。同时还要有耐心,因为有些资料在查询的时候,网上给的答案很杂,你需要自己去筛选有用的信息,没有耐心是不行的,有时候为了弄明白一个功能如何实现,我可能要查找几个小时的资料并自己测试可行性,这是很费时间的。当然,你学会了以后对自己的好处也是很大的,下次再有类似的应用就简单的多了,可以举一反三的去实现。

那么python入门之后呢?要用到实处才行,有的公司的工作需要到网上去查找资料做分析,有的是找别人的资料(比如百度等),有的是自己公司的内部资料(比如我😁)。因为工作需要,我需要爬取公司的案件数据,并把数据整合起来保存成表格。因为我有一点python的底子,熟悉工作流程之后就开始着手写自己需要的功能,去把一些固定的、重复的工作交给python来做。

第一步:先找到所需要的网址URL

打开网站,按F12,打开开发者模式,找到所需要的网址、请求方法和headers信息

图片

找到网址和请求方法后,就可以知道去哪里,用什么方法去获取数据了。

网址是我公司的系统网址,没有用户和密码是登录不上去的,这里只是做个展示

有需要的酱友可以找其它的网站爬取内容。我用的requests来爬取(本来想实现模拟登录来保存cooking,目前还没有研究明白,就略过了。)。

第二步:分析网址的变化

找到这两个信息之后就可以开始了,先把网址URLheaders(headers的作用是用来模拟浏览器信息的,要不会被反爬)保存上

url = 'http://api.smart-insight-service.com:40423/case_medical?a=paginate&_=1658047475149'
headers = {
        'Accept':
        'application/json, text/javascript, */*; q=0.01',
        'Accept-Encoding':
        'gzip, deflate',
        'Accept-Language':
        'zh-CN,zh;q=0.9',
        'Authorization':
        '',
        'Connection':
        'keep-alive',
        'Host':
        'api.smart-insight-service.com:40423',
        'Origin':
        'http://saas.smart-insight-service.com:40423',
        'Referer':
        'http://saas.smart-insight-service.com:40423/case/case_search/detail.html',
        'User-Agent':
        'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'
    }

Authorization为空是因为不能自动获取,需要手动粘贴过来,而且由于隐私原因我也不能粘贴过来。有这些信息其实就可以爬取网站的数据了,不过这个是默认的主页信息,还需要找到关键词来定位到自己需要的信息那里。比如我想找批次号为BJ-GGDE210421的批次信息,就要输入然后查询,对比一下两个URL的不同点(第一个是原网址,第二个是带有参数的网址)

url = 'http://api.smart-insight-service.com:40423/case_medical?a=paginate&_=1658047475149'
url = 'http://api.smart-insight-service.com:40423/case_medical?a=paginate&batch_no=BJ-GGDE210421&_=1658047475152'

看到区别了吗,就是a=XXX后面多了一个**&batch_no=BJ-GGDE210421**,这个是那个我要查找的批次。

第三步:开始获取数据

准备好之后就可以获取数据了,代码如下:

def 获取案件信息(url, headers):
    s = requests.Session()
    s.mount('http://', HTTPAdapter(max_retries=3))
    s.mount('https://', HTTPAdapter(max_retries=3))
    try:
        req = s.get(url=url, headers=headers, timeout=20)
        r = req.json()
        a = r.get('msg')
        if a == '请求成功':
            datas = r.get('data')  # 案件列表要分离2次,案件详情分离1次。
 
        else:
            datas = a
            print(a)
            
    except Exception as e:
        # 输出错误提示
        print(datetime.now())
        exstr = traceback.format_exc()
        print(f'exstr = {exstr}')
        print(f'e = {e}')
        datas = {}
 
    return datas

requests.Session() 这个功能不太清楚是做什么了🤣这就是不做注释的后果,各位新酱友要以我为戒,千万不要不写注释。(关于用中文,这是我个人的一个想法,对于英文不好的人,用中文来把一些有关联的地方替换掉,很容易就明白什么意思,有助于理解,不过不建议这么做,酱友们还是要按照大佬们的建议,规范的写代码,命名也规范命名。要是团队合作,规范是必须要遵守的。我这样只是单打独斗,自己用用还行,团队肯定不合适,我也需要去改。)

max_retries=3这个参数是重连次数,我的是重新连接3次,这个可以根据实际情况设置

timeout=20这个参数就是连接等待时长了,单位是秒,由于我们系统原因,我需要设置时间很长才行,要不会连接失败,这个也是视实际情况设置了。

获取到全部数据后,要用json() 这个函数转换成字典形式,这样利于提取数据。

第四步:定位数据字段

我现在需要这个批次下所有的案件号和案件数据,那我就要去知道在哪里去提取。同样F12打开,输入批次号查询,然后点击控制台。

图片

左边的红框是我想要的信息内容,右边是要提取信息的地方,打开右边的红框

图片

有以下几个字段:msg是请求状态,我上面的代码提取这个字段就是判断一下请求成功没有。status是状态码,200是请求成功。重点来了,data字段里才是我们需要的内容,打开看看
在这里插入图片描述

data里面有page字段,这个里面是页面信息(有需要页面信息了再从这里找),略过。

data里面还有个data字段,是个需要二次提取的地方,我上面的代码有注释,也是怕自己忘记

图片

最后提取数据

再次点开data就出现了一个列表,里面就是我所需要的信息了,那么怎么提取出来呢?

def 获取案件信息(url, headers):
    s = requests.Session()
    s.mount('http://', HTTPAdapter(max_retries=3))
    s.mount('https://', HTTPAdapter(max_retries=3))
    try:
        req = s.get(url=url, headers=headers, timeout=20)
        r = req.json()
        a = r.get('msg')
        if a == '请求成功':
            datas = r.get('data')  # 案件列表要分离2次,案件详情分离1次。
 
        else:
            datas = a
            print(a)

这个函数里已经提取了一次,因为案件详情只要提取一次就行,所以这里只提取一次,如果需要提取两次的可以再提取一次,就像是获取字典的值一样方便dataset= r[‘data’][‘data’],这样就可以直接提取两次了

在这里说一下字典的 .get 这个用法,看过一些公众号,说这个好用,其实是看怎么用,我把我的字典获取值都改成 .get 了,然后就发现代码有点啰嗦了😂。如果你能确定获取的字典里必定会有这些内容的话,就直接a = dict[‘key’] 来提取值就行,除非是一些不确定的地方,用 .get 来提取会防止因为没有这个键导致程序出错而停止运行。

下面是把我需要的一些关键数据写成函数批量提取出来(提取成了字典,方便查找数据)

def 提取案件列表个案详情(x):
    if x:
        姓名 = x.get('name')
        批次号 = x.get('batch_no')
        案件号 = x.get('no')
        身份证号 = x.get('id_no')
        上传时间 = x.get('case_data').get('upload_time')
        回传时间 = x.get('case_data').get('send_time')
        案件状态 = x.get('case_status')    # 案件的各种状态,可检查核查状态
        案件id = x.get('case_id')
        审核员 = x.get('user').get('nickname')
        理算状态 = x.get('adjuster_name')
        理算标识 = x.get('adjuster_status')
        身份证号 = x.get('id_no')
        核查状态 = x.get('check_name')  # 和核查校验是一个
        核查校验 = x.get('is_check')
 
        data = {
            '姓名': 姓名,
            '批次号': 批次号,
            '案件号': 案件号,
            '身份证号': 身份证号,
            '上传时间': 上传时间,
            '回传时间': 回传时间,
            '案件状态': 案件状态,
            '案件id': 案件id,
            '审核员': 审核员,
            '核查状态': 核查状态,
            '理算状态': 理算状态,
            '理算标识': 理算标识,
            '身份证号': 身份证号,
            '核查校验': 核查校验
        }
    else:
        data = {}
        print('没有案件列表信息')
    return data

看看那么多 .get 有什么感想?我看着是有点别扭的,不过费了半天时间把所有函数都改了,就不动了,后面我重新写程序的时候就不这么写了

上面的代码就是把列表内所有的案件的信息都提取出来了,列表打开之后还是个字典的样式,直接找自己要的字段即可。

图片

我框了几个字段,可以对照看看 这只是提取一条的数据,还要用for循环来获取列表里的全部内容,下面是个代码示例:

for x in datas:
    a = 提取案件列表个案详情(x)

这样我所需要的内容就全部提取出来存入字典里了,然后就是写入excel表格导出来了。

总结

看,其实爬虫就是这么简单,有时候直接获取后端数据即可。当然,我要学习的地方还很多。比如提取前端的数据,多协程获取数据等。

个人感悟:学习不是你学习了多少,而是你用上了多少,只有你用上的,才是有用的,所以学python不要想着我把这些都学完再写程序,那样是学习不好的,每天都会有大量的库更新,会有更好的库出现,你永远学不完,把自己能用上的学好就行,不是学的多就好。学以致用,就这样。

怎样快速掌握变现级爬虫?

很多人都表示,高阶的爬虫技术不好学,也找不到有价值的项目练手,每个人都在期待一套能快速进阶的速成方案。

想要快速学好爬虫,尤其是可以用于变现的高阶爬虫技术,在这里蛋糕特意给大家准备了一套python编程资料,能够帮你到你从零基础到python高阶爬虫的学习。
在这里插入图片描述

在这里插入图片描述

朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】。

在这里插入图片描述

👉Python学习路线汇总👈

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

👉Python必备开发工具👈

在这里插入图片描述

温馨提示:篇幅有限,已打包文件夹,获取方式在:文末

👉Python学习视频600合集👈

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
在这里插入图片描述

👉实战案例👈

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

👉100道Python练习题👈

检查学习结果。
在这里插入图片描述

👉面试刷题👈

在这里插入图片描述
在这里插入图片描述

资料领取

上述这份完整版的Python全套学习资料已经上传CSDN官方,朋友们如果需要可以微信扫描下方CSDN官方认证二维码输入“领取资料” 即可领取

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/347051.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue常用的修饰符有哪些有什么应用场景

Vue常用的修饰符有哪些有什么应用场景Vue常用的修饰符有哪些有什么应用场景一、修饰符是什么二、修饰符的作用表单修饰符lazytrimnumber事件修饰符stoppreventselfoncecapturepassivenative鼠标按钮修饰符键盘修饰符v-bind修饰符asyncpropscamel三、应用场景参考文献Vue常用的修…

Linux多线程开发

一、线程 1、线程概述 与进程(process)类似,线程(thread)是允许应用程序并发执行多个任务的一种机制。一个进程可以包含多个线程。同一个程序中的所有线程均会独立执行相同程序,且共享同一份全局内存区域…

Power BI: NATURALINNERJOIN的使用

查看官方的文档&#xff0c;NATURALINNERJOIN描述是这样的&#xff1a;语法NATURALINNERJOIN(<LeftTable>, <RightTable>) 参数术语定义LeftTable用于定义联接左侧的表的表表达式。RightTable用于定义联接右侧的表的表表达式。返回值一个表&#xff0c;仅包含两个…

张俊林:由ChatGPT反思大语言模型(LLM)的技术精要

ChatGPT出现后惊喜或惊醒了很多人。惊喜是因为没想到大型语言模型&#xff08;LLM,Large Language Model&#xff09;效果能好成这样&#xff1b;惊醒是顿悟到我们对LLM的认知及发展理念&#xff0c;距离世界最先进的想法&#xff0c;差得有点远。我属于既惊喜又惊醒的那一批&a…

Linux进程间通信(管道)

进程间通信的目的 数据传输&#xff1a;一个进程需要将它的数据发送给另一个进程 资源共享&#xff1a;多个进程之间共享同样的资源。 通知事件&#xff1a;一个进程需要向另一个或一组进程发送消息&#xff0c;通知它&#xff08;它们&#xff09;发生了某种事件&#xff08;如…

Ubuntu20.04开启VNC远程服务配置教程

对于使用过PVE的大佬来说&#xff0c;在自己电脑安装虚拟机打开的画面惨不忍睹&#xff0c;其实它只是用错了地方。 今天给大家介绍一款控制工具&#xff0c;它叫VNC&#xff0c;是用来进行远程连接的非常好用的工具可以很完美的适配自己电脑的屏幕。显示效果如下&#xff1a;…

【Spark分布式内存计算框架——Spark SQL】3. SparkSQL 概述(下)、DataFrame

2.2 官方定义 SparkSQL模块官方定义&#xff1a;针对结构化数据处理Spark Module模块。 主要包含三层含义&#xff1a; 第一、针对结构化数据处理&#xff0c;属于Spark框架一个部分 结构化数据&#xff1a;一般指数据有固定的 Schema(约束)&#xff0c;例如在用户表中&…

MapReduce paper(2004)-阅读笔记

文章目录前言摘要&#xff08;Abstract)一、引言( Introduction)二、编程模型&#xff08;Programming Model&#xff09;三、实现&#xff08;Implementation&#xff09;3.1、执行概述&#xff08;Execution Overview&#xff09;3.2、主节点数据结构&#xff08;Master Data…

im 应用多点登录和消息漫游架构

本文主要节选和总结自沈剑大佬的 微信多点登录与QQ消息漫游架构随想和文章的评论&#xff0c;略有删改 1、多点登录和消息漫游架构 多点登录指的是同个账号可以在多类终端(安卓、pc)同时登录&#xff0c;但是同类终端只能在唯一的一台设备上登录。 消息漫游指的是服务端保存聊天…

超详细讲解线性表和顺序表!!

超详细讲解线性表和顺序表&#xff01;&#xff01;线性表顺序表顺序表的概念及结构静态顺序表动态顺序表顺序表接口实现1、创建2、初始化3、扩容4、尾插5、打印6、销毁7、尾删8、头插9、头删10、插入任意位置11、删除任意位置12、查找13、修改线性表 线性表&#xff08;linea…

分析C语言位域的访问开销

背景 C语言的位域用于描述结构体的指定字段占多少bit&#xff0c;使得多个字段可以存到一个字节里&#xff0c;也可以让一个字段占多个字节。它能减小结构体的内存占用&#xff0c;同时还能精确限定结构体字段的取值范围。 问题的提出 项目上有个硬件模块&#xff0c;它输入…

Linux系统下基于Docker安装Yapi,并且迁移Yapi数据

本文主要讲四个部分&#xff1a; 1.什么是Yapi 2.Centos7 下基于docker安装Yapi 3.Yapi数据迁移 4.利用Nginx反向代理 什么是Yapi YApi 是高效、易用、功能强大的 api 管理平台&#xff0c;旨在为开发、产品、测试人员提供更优雅的接口管理服务。可以帮助开发者轻松创建、…

网络安全-内网DNS劫持-ettercap

网络安全-内网DNS劫持-ettercap 前言 一&#xff0c;我也是初学者记录的笔记 二&#xff0c;可能有错误的地方&#xff0c;请谨慎 三&#xff0c;欢迎各路大神指教 四&#xff0c;任何文章仅作为学习使用 五&#xff0c;学习网络安全知识请勿适用于违法行为 学习网络安全知识请…

【C++、数据结构】哈希 — 闭散列与哈希桶的模拟实现

文章目录&#x1f4d6; 前言1. STL中哈希表的两个应用⚡1.1 &#x1f31f;unordered_set1.2 &#x1f31f;unordered_map2. 常见查找的性能对比&#x1f4a5;3. 哈希表模拟实现&#x1f3c1;3.1 哈希的概念&#xff1a;3.2 哈希函数&#xff1a;3.3 哈希冲突&#xff1a;3.4 闭…

RPC概念与理解(一)

目录 1.写在前面 2. 电商系统的演变 2.1 单一应用框架 2.2 垂直应用框架 2.3 分布式应用架构(RPC) 2.4 流动计算架构(SOA) 2.5 架构演变详解 3.远程调用方式 RPC Http 总结&#xff1a;对比RPC和http的区别 4.什么是PRC 5.RPC是什么 6.RPC剖析 6.1.RPC的工作原理…

Java并发编程解析之基于JDK源码解析Java领域中ReentrantLock锁的设计思想与实现原理

一、开头 在并发编程领域&#xff0c;有两大核心问题&#xff1a;一个是互斥&#xff0c;即同一时刻只允许一个线程访问共享资源&#xff1b;另一个是同步&#xff0c;即线程之间如何通信、协作。 主要原因是&#xff0c;对于多线程实现实现并发&#xff0c;一直以来&#xff…

【蓝桥杯集训3】二分专题(3 / 5)

目录 二分模板 1460. 我在哪&#xff1f; - 二分答案 哈希表 1221. 四平方和 - 哈希表 / 二分 1、哈希表 2、二分 自定义排序 1227. 分巧克力 - 113. 特殊排序 - 二分模板 l r >> 1 —— 先 r mid 后 l mid1 —— 寻找左边界 —— 找大于某个数的最小值lr…

SRV6跨域优势

背景 运营商网络作为一张覆盖全国的网络&#xff0c;其主体分为骨干&#xff0c;省干&#xff0c;城域网层级&#xff0c;主流的管理模式为分层级管理。随着运营商网络服务的终端规模不断增长&#xff0c;不同地理位置之间网络连接的需求变得非常的普遍&#xff0c;但不同网络…

SpringMVC使用JSTL

简介 JSTL 标签是一个开放源代码的 JSP 标签库&#xff0c;是由 apache 的 jakarta 小组来维护的&#xff1b;JSTL 只能运行在支持 JSP1.2 和Servlet2.3 规范的容器上&#xff0c;在 jsp 页面中经常用到&#xff0c;能帮助我们实现一些特殊的功能&#xff0c;例如&#xff1a;…

windows-Mysql的主从数据库同步设置

复制原有的mysql修改my.ini配置文件 修改端口号修改从数据的地址和从数据库的数据存放地址安装从数据库进入从数据库的bin目录&#xff0c;打开命令窗口输入命令&#xff1a;mysqld.exe install mysql-back --defaults-file "C:\ProgramData\MySQL\MySQL Server 5.7-back\…