在使用xpath解析网页数据时,会面临一些不好处理的网页,如下所示:

<p>  感冒是由于感触风邪或时行病毒,引起肺卫功能失调,出现鼻塞、流涕、喷嚏、头痛、恶寒、发热、全身不适等一系列临床表现的一种病证。其临床表现与西医学所称的急性上呼吸道感染相似。普通感冒、流行性感冒、咽炎、扁桃体炎、喉炎等均可参考本病辨证论治。</p>
<p><strong>  [诊断]</strong></p>
<p>  1恶寒发热、鼻塞、流涕、喷嚏等症状为主,多兼咳嗽,可伴咽喉痒或痛、呕吐、腹泻或高热惊厥。</p>
<p>  2 四时皆有,以冬春季节为多见,常因骤变而发病。</p>
<p>  3 一般病毒感染者血白细胞总数正常或偏低,中性粒细胞减少,淋巴细胞相对增多,单核细胞增加。细菌感染者白细胞计数增多,中性粒细胞增多。</p>
<p><strong>  [辨证论治]</strong></p>
<p>  1 风寒束表 症候:鼻塞声重,喷嚏,流清涕,恶寒发热或发热不甚,无汗,周身酸痛,咳嗽痰白质稀,舌苔薄白,脉浮紧。 治法:辛温解表,宣肺散寒。 例方:荆防败毒散。</p>
<p>  2 风热犯表 症状:发热或高热,微恶风,鼻塞喷嚏,流稠涕,汗出口干,咽喉痛,咳嗽痰稠,舌苔薄黄,脉浮数。 治法:辛凉解表,宣肺清热。 例方:银翘散。</p>
<p>  3 暑湿感冒 症状:发热,汗出热不解,鼻塞流浊涕,头昏重胀痛,身重倦怠,心烦口渴,胸闷欲呕,尿短赤,舌苔黄腻,脉濡数。 治法:清暑祛湿解表。 例方:新加香薷饮。</p>
<p>  4 虚体感冒</p>
<p>  4.1 气虚感冒 症状:恶寒较甚,发热,无汗,头痛身楚,咳嗽,痰白,咯痰无力,平素神疲体弱,气短懒言,反复易感,舌淡苔白,脉浮无力。 治法:益气解表 例方:参苏饮。</p>
<p>  4.2 阴虚感冒</p>
<p>  症状:身热,微恶风寒,少汗,头昏,心烦,口干,干咳少痰,舌红少苔,脉细数。 治法:滋阴解表。 例方:加减葳蕤汤。</p>
<p><strong>  [其他疗法]</strong></p>
<p>  1 中成药</p>
<p>  1.1 风寒证可口服午时茶、通宣理肺丸。</p>
<p>  1.2 风热证可口服银翘解毒片,羚翘解毒片,桑菊感冒冲剂。</p>
<p>  1.3 感冒兼见脾胃湿困诸症者可用藿香正气丸。</p>
<p>  1.4 时行感冒可口服板蓝根冲剂。</p>
<p>  2 中药针剂 风热证、暑湿证及表寒里热证均可用喜炎平、双黄连加入5%葡萄糖注射液内静滴,每日1次。</p>
<p>  3 外治疗法</p>
<p>  3.1大蒜液滴鼻,10%大蒜液每次1滴,每日滴3~5次。适用于各证型感冒。</p>
<p>  3.2 拔火罐可取大椎、身柱、大杼、肺俞、风门等穴,每日1次。适用于风寒证。</p>
<p><strong>  [治法改进]</strong></p>
<p>  感冒轻证,或初起偏寒偏热俱不明显,仅稍有恶风、微热、头胀、鼻塞者,可予辛凉轻剂,疏风解表,药用桑叶、薄荷、防风、荆芥等微辛轻清透邪。咽痒咳嗽者,酌配前胡、牛蒡子、贝母、橘红、桔梗、甘草等清宣肺气。</p>
<p><strong>  [疗效标准]</strong></p>
<p>  1 治愈:症状消失,实验室检查恢复正常。</p>
<p>  2 好转:发热消退,临床症状减轻,实验室检查基本正常。</p>
<p>  3 未愈:临床症状无改善或加重,实验室检查与治疗前比较无明显改善或加重。</p>
<font color="gray"> <p><font color="gray">(摘自《中医常见病及优势病种诊疗常规》,仅供参考,请在医师指导下使用。)</font></p></font>

目标是分别拿到<p><strong></strong></p>中的文本和其后跟随的<p>标签的内容。
使用xpath进行处理:

  results = html.xpath("//strong[text()='  [诊断]']/following::p[position()<count(//strong[text()='  [诊断]']/following::p) - count(//strong[text()='  [辨证论治]']/following::p)+1]/text()")

拿到数据在将结果保存为自己想要的格式即可。
附上全部代码:

import requests
from lxml import etree
import json
import re
from bs4 import BeautifulSoupclass Disease_Species():def __init__(self):# 真实url :https://api.cntcm.com.cn/api/getArticles?cid=2262&pageSize=25&pageNumber=1self.url = "https://api.cntcm.com.cn/api/getArticles?"self.headers = {"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_16_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36"}def run(self):for i in range(1,3):url = self.url + "cid=2262&pageSize=25&pageNumber={}".format(i)response = requests.get(url=url,headers=self.headers)print(response.status_code)# print(response.text)if response.status_code == 200:# 定义存储字典disease_dict = {}# json 类型text = response.texttext_json = json.loads(text)text_list = text_json['list']for text in text_list:# print(text)# 构造url的idfileID = text['fileID']# 病种名称disease_name = text['title']file_url = "https://api.cntcm.com.cn/api/getArticle?aid={}".format(fileID)print(file_url)file_url_response = requests.get(url=file_url,headers=self.headers)file_url_text = json.loads(file_url_response.text)content = file_url_text['content']#print(content)#exit()html = etree.HTML(content)# print(html)# 病种的简介abstract = html.xpath("//p[1]/text()")abstract = ''.join(abstract).strip()if abstract is None:breakstrong_list = html.xpath("//p/strong")#  bs4#  bs4 = BeautifulSoup(content, features="lxml")# print(strong_list)strong_name_list = []strong_name_str_list = []for i in range(len(strong_list)):#print(i)strong_name = strong_list[i].xpath("text()")strong_name = ''.join(strong_name)strong_name_str = ''.join(strong_name).replace("[","").replace("]","").strip()#print(strong_name_str)strong_name_list.append(strong_name)strong_name_str_list.append(strong_name_str)# print(bs4.text)print("*************")#print(strong_name_list)results_list = []for i in range(len(strong_name_list)):if i < len(strong_name_list)-1:results = html.xpath("//strong[text()='{}']/following::p[position()<count(//strong[text()='{}']/following::p) - count(//strong[text()='{}']/following::p)+1]/text()".format(strong_name_list[i],strong_name_list[i],strong_name_list[i+1]))results = ''.join(results).replace("[","").replace("]","").strip()#print(strong_name_str_list[i], results)results_dict = {"{}".format(strong_name_str_list[i]):"{}".format(results)}results_list.append(results_dict)else:results = html.xpath("//strong[text()='{}']/following::p/text()".format(strong_name_list[i]))results = ''.join(results).replace("[","").replace("]","").strip()#print(strong_name_str_list[i], results)results_dict = {"{}".format(strong_name_str_list[i]): "{}".format(results)}results_list.append(results_dict)disease_dict = {"disease_name":disease_name,"abstract":abstract,"data":results_list}print(disease_dict)#exit()disease_dict = str(disease_dict).replace("'", '"')with open("disease_data", 'a', encoding='utf-8') as f:print(1111)f.write(disease_dict)f.write("\n")f.close()if __name__ == '__main__':ds = Disease_Species()ds.run()

xpath获取两个标签之间的内容相关推荐

  1. jsoup怎么获取两个标签之间的text?

    转载自    jsoup怎么获取两个标签之间的text? 这是开发者工具解析到的一个论坛页面结构.. 可以看到每一个a标签和br标签之间总会夹着一个text,,也就是密码文本.而我根据网上的 API教 ...

  2. XPath 获取两个node中间的HTML Nodes

    XPath 获取两个node中间的HTML Nodes 2015-06-01 16:42 972人阅读 评论(0) 收藏 举报 //div[@id="Recipe"]//h5[co ...

  3. php获取两个字符,php获取两个字符串之间的子字符串

    指定原始字符串,给定开始和结尾字符串,获得这两个字符串之间的子字符串的php函数 /** * Returns the substring between two strings, delimiters ...

  4. Java 获取两个日期之间的日期

    1.前期需求,两个日期,startDate和endDate,然后获取到两个日期之间的日期 /*** 获取两个日期之间的日期* @param start 开始日期* @param end 结束日期* @ ...

  5. java获取两个时间之间的所有日期、月份、年份,返回列表

     需求描述 输入开始时间和结束时间,获取时间范围内的所有日期,月份.年份     (输入可以为"yyyy-MM-dd HH:mm:ss"或者"yyyy-MM-dd&quo ...

  6. c# 获取两个时间之间的时间差

    c# 获取两个时间之间的时间差(时.分.秒) public static string GetTime(DateTime timeA){//timeA 表示需要计算DateTime timeB = D ...

  7. Java 获取两个月份之间的所有月份(含跨年)

    /*** 获取两个月份之间的所有月份(含跨年)** @param minDate 开始时间 格式 2022-02或 2022-01-03* @param maxDate 结束时间 格式 2023-08 ...

  8. js实现获取两个日期之间所有月份

    js实现获取两个日期之间所有月份 根据所选择的开始日期与结束日期获取之间的月份 代码如下 注意 根据所选择的开始日期与结束日期获取之间的月份 在使用过程中你可能需要获取两个时间的月份 组件moment ...

  9. java获取两个日期之间的所有日期(包括开始日期和结束日期)

    java获取两个日期之间的所有日期集合 解决方法: import java.text.SimpleDateFormat; import java.util.ArrayList; import java ...

最新文章

  1. facebook新无监督论文-Unsupervised Learning of Visual Features by Contrasting Cluster Assignments
  2. Flyweight 享元模式
  3. hadoop data join
  4. oracle测试表什么名字,Oracle_PLSQL测试题与答案(绝对经典)
  5. linux 内存溢出排查_记一次JAVA 线上故障排查完整套路
  6. 【机器视觉】 dev_open_tool算子
  7. mysql从库应用负载_线上MySQL数据库高负载的解决思路--再次论程序应用索引的重要性...
  8. Indent Guides for Visual Studio 代码格式化收缩插件
  9. pip 安装 scipy 出现错 no lapack/blas resources
  10. 520 miix 小兵 黑苹果_黑苹果资源
  11. 大数据从入门到精通学习系统路线分享
  12. 深入浅出SSM框架流程以及原理
  13. 运算服务器v9型号,V9服务器
  14. 金蝶星空支持mysql吗_金蝶云星空K3 CLOUD SQL 数据库优化
  15. 解决iOS10.3打开APP提示未受信任的企业级开发者
  16. 清除计算机用户缓存,如何清除电脑缓存垃圾,电脑清理缓存方法
  17. 用什么工具可以免费下载720云VR全景图
  18. 第二届Techo TVP 开发者峰会有感
  19. 笔试题——硬币与金币(概率)
  20. 智信分销拼团拍卖商城v3.38.3

热门文章

  1. recyclerview删除item,解决下标越界
  2. 【XSS漏洞-02】XSS靶场介绍(含BlueLotus_XSSReceiver、DVWA、XSS-labs等)
  3. mysql异常Incorrect string value: '\xE6\xB5\x8B\xE8\xAF\x95' for column 'region_name'
  4. 上网行为审计运用了哪些技术
  5. BVR、RV、BV电线三者区别
  6. 数据结构 时间复杂度 空间复杂度 一看就懂版本
  7. BugTrap:程序崩溃快照、bug跟踪之利器
  8. 外部程序通过COM启动AutoCAD时RPC_E_CALL_REJECTED的问题解决办法
  9. Android 监听U盘OTG挂载状态
  10. 一个农民工混迹于 IT 行业多年后的泣血总结