【Python实战】Python采集某大夫文字数据

news2025/1/11 5:55:12

前言

今天,有一位粉丝找到我,希望我出一期关于某大夫数据采集的文章,今天,我们就来采集某大夫的问诊数据。

环境使用

  • python 3.9
  • pycharm

模块使用

  • requests

模块介绍

  • requests

        requests是一个很实用的Python HTTP客户端库,爬虫和测试服务器响应数据时经常会用到,requests是Python语言的第三方的库,专门用于发送HTTP请求,使用起来比urllib简洁很多。

  • parsel

        parsel是一个python的第三方库,相当于css选择器+xpath+re。

parsel由scrapy团队开发,是将scrapy中的parsel独立抽取出来的,可以轻松解析html,xml内容,获取需要的数据。

相比于BeautifulSoup,xpath,parsel效率更高,使用更简单。

  • re

        re模块是python独有的匹配字符串的模块,该模块中提供的很多功能是基于正则表达式实现的,而正则表达式是对字符串进行模糊匹配,提取自己需要的字符串部分,他对所有的语言都通用。

  • os

        os 就是 “operating system” 的缩写,顾名思义,os模块提供的就是各种 Python 程序与操作系统进行交互的接口。通过使用 os 模块,一方面可以方便地与操作系统进行交互,另一方面也可以极大增强代码的可移植性。

  • csv

        它是一种文件格式,一般也被叫做逗号分隔值文件,可以使用 Excel 软件或者文本文档打开 。其中数据字段用半角逗号间隔(也可以使用其它字符),使用 Excel 打开时,逗号会被转换为分隔符。csv 文件是以纯文本形式存储了表格数据,并且在兼容各个操作系统。

模块安装问题:

  • 如果安装python第三方模块:

win + R 输入 cmd 点击确定, 输入安装命令 pip install 模块名 (pip install requests) 回车

在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解释器没有设置好。

代码实现

今天,我们就来采集好大夫的问诊数据。下面,我和大家介绍如何获取数据。

确定网址

首先,我们要确定我们获取的目标网站,然后,确定我们需要的数据是什么。

 我们滚动页面,我们看到了问诊记录,这时,我们打开开发者工具。打开开发者工具之后,刷新页面,我们滚动网页页面,我们会看到下面的页面,大家在滚动之前,最好清除一下数据包。

 这样,我们就抓取到了所有问诊记录的数据包,我们会发现,里面有一段数字不一样,我们猜想是页码,当然,我们通过验证,就是页码,既然我们拿到了地址,就简单多了,我们接下来,开始写代码。

发送请求

我们首先确定我们的目标网址,对我们需要获取的数据。我们先看一下,数据包里面有什么内容,这个,和我们网页显示的一模一样。我们先获取第一页的数据。

import requests


headers = {
    "authority": "zoo.haodf.com",
    "accept": "*/*",
    "accept-language": "zh-CN,zh;q=0.9",
    "cookie": "g=HDF.143.64778d15bc9b3; krandom_a119fcaa84=877492; __bid_n=1887c8ff1502fccdeb4207; FPTOKEN=pQ0+Q1N7Yy9X9wO03KejFmuYIJFJp3G5sBWbXvIwC0W+7v0ggLDEkfeBruyynjo0oXNB9jzCrUOVWeJ9OvBRxFt8rwwdVDZXoc7NdGQtdZpccy0BscX7HYE1NXnwZrSmYlCbcQKBXww+X4DKPXzcCBL0rjvWKiwQMPnLmFxwTxYi/WoosLCoU348LjMiHDlu/6H8j9g5YroiL+NnOGTeuvYCpcXgzL8ILqr03u8djk8n6IhNTw1gchBX5HrpfvByEaH1b2p5B2KbWb7s7gksZjwfvgWFz6DG9mmjoEmm2s0AP4MdTNBlsYfdVhFyo2L5c/520wr9TBlIGKAxuEAMEkxiN9it9anrElqy6f7WOSq7WDumwV1UCYzp/r7LJK1hdR4Hl7JeTGItqZow5EtODw==^|OlnZ9EPt13Wn8Lt1mJ76AvSqwbhaCvCjgnLXiiG3WV0=^|10^|0ebdcc577fb79709972c988c7aaf86f9; Hm_lvt_dfa5478034171cc641b1639b2a5b717d=1687267673,1688477978; Hm_lpvt_dfa5478034171cc641b1639b2a5b717d=1688479957",
    "referer": "https://www.haodf.com/",
    "sec-ch-ua": "^\\^Not.A/Brand^^;v=^\\^8^^, ^\\^Chromium^^;v=^\\^114^^, ^\\^Google",
    "sec-ch-ua-mobile": "?0",
    "sec-ch-ua-platform": "^\\^Windows^^",
    "sec-fetch-dest": "empty",
    "sec-fetch-mode": "no-cors",
    "sec-fetch-site": "same-site",
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36",
    "origin": "https://www.haodf.com",
    "Accept": "*/*",
    "Accept-Language": "zh-CN,zh;q=0.9",
    "Connection": "keep-alive",
    "If-None-Match": "4be90d78c1efe46b69558f575162c694",
    "Referer": "https://www.haodf.com/",
    "Sec-Fetch-Dest": "script",
    "Sec-Fetch-Mode": "no-cors",
    "Sec-Fetch-Site": "cross-site",
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36",
    "content-length": "0"
}
cookies = {
    "HMACCOUNT_BFESS": "98346E4F47A1DA39",
    "HMTK": "1",
    "BAIDUID_BFESS": "42362309F92CBA36955515B3BC24C906:SL=0:NR=10:FG=1",
    "ZFY": "QcUe7:AJExloferQMOZmqrXdgnmibYtD6jG4mPN9SkCs:C",
    "BDUSS_BFESS": "hlejJHY35ocUZaZW1LdjRpc3l6bjcwM3JCNjZTcjRLZHNBVExWcU00S1ljTXBrSVFBQUFBJCQAAAAAAAAAAAEAAAA2pSDKwbXE48qxz8LRqQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJjjomSY46Jkel",
    "H_PS_PSSID": "36544_38942_38857_38795_38957_38954_39009_38831_38918_38973_38818_38638_26350"
}
url = "https://www.haodf.com/ndoctor/getBingchengList4PC"
params = {
    "spaceId": "2742548",
    "p": "1",
    "isGoodBingcheng": "0"
}
response = requests.get(url, headers=headers, cookies=cookies, params=params)

print(response.text)
print(response)

 我们运行这个代码,我们可以看到这样的输出,就说明我们的代码也没有问题,也没有被反爬。

 获取数据

我们这个为了方便展示,我们只获取问诊文字信息,关于其他的数据,原理都是一样的。

接下来,我们开始写代码,后面都是字典取值,没有什么难度,按部就班的取值就好。我们分析数据分析,一页里面有30个问诊记录。

datas = response.json()['data']['data']

for data in datas:
    print(data)

我们可以看到,这里每一行的数据,就是一个患者的信息,我们接下来获取文字记录,不过,我们会发现有语音消息字样,这里我们就不管了。

datas = response.json()['data']['data']

for data in datas:
    lastPostTime =data['doctorRes4MrInfo']['lastPostTime']
    messageText=data['doctorRes4MrInfo']['messageText']
    print(lastPostTime,messageText)

到这里,我们的代码就完成了,也实现了我们想要的功能。

 多页获取

多页获取数据,其实很简单,我们只要改页码数字就可以了,其他的代码都是一样的,这里,我也写保存数据的代码了,感兴趣的可以看我之前的博客。

import requests

for p in range(1, 100):
    headers = {
        "cookie": "g=HDF.143.64778d15bc9b3; krandom_a119fcaa84=877492; __bid_n=1887c8ff1502fccdeb4207; FPTOKEN=pQ0+Q1N7Yy9X9wO03KejFmuYIJFJp3G5sBWbXvIwC0W+7v0ggLDEkfeBruyynjo0oXNB9jzCrUOVWeJ9OvBRxFt8rwwdVDZXoc7NdGQtdZpccy0BscX7HYE1NXnwZrSmYlCbcQKBXww+X4DKPXzcCBL0rjvWKiwQMPnLmFxwTxYi/WoosLCoU348LjMiHDlu/6H8j9g5YroiL+NnOGTeuvYCpcXgzL8ILqr03u8djk8n6IhNTw1gchBX5HrpfvByEaH1b2p5B2KbWb7s7gksZjwfvgWFz6DG9mmjoEmm2s0AP4MdTNBlsYfdVhFyo2L5c/520wr9TBlIGKAxuEAMEkxiN9it9anrElqy6f7WOSq7WDumwV1UCYzp/r7LJK1hdR4Hl7JeTGItqZow5EtODw==^|OlnZ9EPt13Wn8Lt1mJ76AvSqwbhaCvCjgnLXiiG3WV0=^|10^|0ebdcc577fb79709972c988c7aaf86f9; Hm_lvt_dfa5478034171cc641b1639b2a5b717d=1687267673,1688477978; Hm_lpvt_dfa5478034171cc641b1639b2a5b717d=1688479957",
        "referer": "https://www.haodf.com/",
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36",
    }

    url = "https://www.haodf.com/ndoctor/getBingchengList4PC"
    params = {
        "spaceId": "2742548",
        "p": p,
        "isGoodBingcheng": "0"
    }
    response = requests.get(url, headers=headers, params=params)
    datas = response.json()['data']['data']
    for data in datas:
        lastPostTime = data['doctorRes4MrInfo']['lastPostTime']
        messageText = data['doctorRes4MrInfo']['messageText']
        print(lastPostTime, messageText)

简化后的代码如上,大家如果还有什么问题可以在评论区留言。

6adf31c8c5dd4e6a83314f4805b30bc1.jpg

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

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

相关文章

java 健身营养师网站系统myeclipse定制开发mysql数据库B/S模式java编程计算机网页

一、源码特点 JSP 健身营养师网站系统 是一套完善的系统源码,对理解JSP java 编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。研究的基本内容是基于网上 书店系统,使用JSP作为页面开发工具。Web服…

MMaction2 使用记录1——config介绍

目录 了解config (模型训练测试的整体过程配置文件) 通过脚本参数修改config Config 文件 结构 config文件的命名规则 动作识别的config系统 了解config (模型训练测试的整体过程配置文件) 我们使用python文件作为config&a…

FreeRTOS学习笔记—任务挂起和恢复

文章目录 一、任务挂起和恢复API函数1.1 vTaskSuspend()函数1.2 vTaskResume()函数1.3 xTaskResumeFromISR()函数 二、任务挂起和恢复2.1 任务1挂起解挂任务22.2 中断中解挂任务1 三、补充内容3.1 FreeRTOS数据类型3.2 中断优先级分组3.3 错误问题 一、任务挂起和恢复API函数 …

ChatGPT | Word文档如何更好地提取表格内容给ChatGPT

本文来自http://blog.csdn.net/hellogv/ ,引用必须注明出处! Word文档如何更好地提取表格内容给ChatGPT做知识库,这属于文本预处理工作。 本文只讲思路、测试结果,技术实现用Python和Java都能完成,下一篇文章再贴源码…

Python实用工具--全python制作一个音乐下载器

前言 又来展示一下关于Python的实用小技巧了,这次就来分享分享–如何用Python来制作一个音乐下载器 做这个有什么用啊,我只能说,可以免费下载歌曲啊,这样就能每月保住自己钱包咯 效果展示 基本界面 图片以及文字都是可以自己更…

《动手学深度学习》——线性神经网络

参考资料: 《动手学深度学习》 3.1 线性回归 3.1.1 线性回归的基本元素 样本: n n n 表示样本数, x ( i ) [ x 1 ( i ) , x 2 ( i ) , ⋯ , x d ( i ) ] x^{(i)}[x^{(i)}_1,x^{(i)}_2,\cdots,x^{(i)}_d] x(i)[x1(i)​,x2(i)​,⋯,xd(i)​…

序列化对象

1:对象序列化 以内存为基准,把内存中的对象存储到磁盘文件中去,称为对象序列化。使用到的流是对象字节输出流:ObjectOutputStream 2:对象要序列化,必须实现Serializable序列化接口 2:对象反序…

二十四、HTTPS

文章目录 一、HTTPS(一)定义(二)HTTP与HTTPS1.端口不同,是两套服务2.HTTP效率更高,HTTPS更安全 (三)加密,解密,密钥等概念(四)为什么要…

【H5】文件下载(javascript)

系列文章 【移动设备】iData 50P 技术规格 本文链接:https://blog.csdn.net/youcheng_ge/article/details/130604517 【H5】avalon前端数据双向绑定 本文链接:https://blog.csdn.net/youcheng_ge/article/details/131067187 【H5】安卓自动更新方案&a…

hivesql列转行

原表: 目标表: sql代码: select dp as 日期 ,city_name as 城市, split_part(subject,‘:’,1) as 指标, cast( split_part(subject,‘:’,2) as double ) as 数值 from( select trans_array(2,‘;’,dp,city_name,subject) as (dp,city_na…

探秘高逼格艺术二维码的制作过程-AI绘画文生图

前几天看到几个逼格比较高的二维码,然后自己动手做了一下,给大家看看效果: 1、文生图(狮子): 2、文生图(城市): 下边将开始介绍怎么做的,有兴趣的可以继续读…

Vault AppRole最佳实现过程

AppRole AppRole身份验证方法允许机器或应用程序使用 Vault 定义的角色进行身份验证。AppRole 的开放式设计支持使用不同的工作流和配置来应对大量应用程序。这种身份验证方法主要是面向自动化工作流程(机器和服务)设计的,对人类操作者不太有用。 “AppRole”代表一组 Vau…

大数据Doris(五十六):RESOTRE数据恢复

文章目录 RESOTRE数据恢复 一、RESTORE数据恢复原理 二、RESTORE 数据恢复语法 三、RESOTRE数据恢复案例 1、在 Doris 集群中创建 mydb_recover 库 2、执行如下命令恢复数据 3、查看 restore 作业的执行情况 四、注意事项 RESOTRE数据恢复 Doris 支持BACKUP方式将当前…

力扣 40. 组合总和 II

题目来源:https://leetcode.cn/problems/combination-sum-ii/description/ C题解: 这道题的难点在于解集中不能包含重复的组合。如果用set去重会造成超时,所以只能在单层递归逻辑中处理。通过识别下一个数与当前数是否相同,来修改…

抖音小程序--开启沙盒模式后一直报,获取白名单失败:您没有权限访问此应用

一. 出现问题 按照抖音开发文档创建沙盒环境,然后替换appid后一直报无权限,如下图: 最后才发现,登录抖音开发工具的账户必须是超级管理员账户,添加的协助开发者,就算给了全部权限,也依然会报上面…

Navicat 入选中国信通院发布的《中国数据库产业图谱(2023)》

7 月 4 日,2023 年可信数据库发展大会主论坛在北京国际会议中心成功召开。会上,中国信息通信研究院正式发布《中国数据库产业图谱(2023)》。作为中国数据库生态工具供应商,凭借易用、稳定、可靠的产品力,以…

【C++】4.工具:读取yaml配置信息

😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍读取yaml配置信息。 学其所用,用其所学。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下,下次更新不迷路&…

web学习1--maven--项目管理工具

写在前面: 这学期搞主攻算法去了,web的知识都快忘了。开始复习学习了。 文章目录 maven介绍功能介绍maven安装jar包搜索仓库 pom文件项目介绍父工程依赖管理属性控制可选依赖构建 依赖管理依赖的传递排除依赖可选依赖 maven生命周期分模块开发模块聚合…

产品的帮助中心怎么建设?关于帮助文档的7个小技巧

用户使用产品的过程中,常常会遇到与产品使用相关的问题。这时候,用户通常会面临三个选择:1.寻找客服的帮助 2.阅读产品帮助文档 3.放弃使用产品。 显然,对于企业而言,当然是希望能够帮助用户解决问题,使其…

shiro入门

1、概述 Apache Shiro 是一个功能强大且易于使用的 Java 安全(权限)框架。借助 Shiro 您可以快速轻松地保护任何应用程序一一从最小的移动应用程序到最大的 Web 和企业应用程序。 作用:Shiro可以帮我们完成 :认证、授权、加密、会话管理、与 Web 集成、…