解决Xpath提取某个class下的多个标签,保存时标签不能一一对应问题

问题描述

某招聘网页部分结构如下所示

  <li>
      <div class="sub-li">
          <a href="XX.html" ka="index_rcmd_job_1" class="job-info" target="_blank">
              <div class="sub-li-top">
                  <div class="sub-li-info">
                      <p class="name">中级产品经理</p>
                      <div class="guide-app-download-icon" data-securityid="KTnLhlaF7FzO9-419_2mmVOX0_nySsTXoq31dIPjDQvlUjL01oyzAWNMRNYLgKGm5cEhOFPLSPfGTrKt1YnDDB6XFzXp" data-bossid="324b062645ff119b0nR73t26EVZR" data-isfriend="false"></div>
                      
                  </div>
                  <p class="salary">15-22K</p>
              </div>
              <p class="job-text">
                  <span>北京</span><span>3-5年</span><span>本科</span>
                              <span >B端产品</span>
                              <span >Axure</span>
              </p>
          </a>
  </li>

我在使用xpath爬取class=job-text后使用items存储每一个职位对应的信息。

# 提取职位名称
names = root.xpath('//a[@class="job-info"]/div[@class="sub-li-top"]/div[@class="sub-li-info"]/p[@class="name"]/text()')
# 提取 p=job-text 里每个 span 的内容
description = root.xpath('//a[@class="job-info"]/p[@class="job-text"]/span/text()')

items = []
for i in range(0, len(names)):
    item = {}
    item["职位名称"] = names[i]
    item["其他描述"] = description[i]
    item["薪资情况"] = salary[i]
    items.append(item)
self.save_file(items)

但是运行后的结果是

{'职位名称': '中级产品经理', '其他描述': '北京',’薪资情况‘: '15-22K'}
{'职位名称': '硬件研发工程师',  '其他描述': '3-5年',’薪资情况‘: '18-25K'}

即一条信息里的其他描述只会显示 ‘北京’,下一条信息的其他描述显示’3-5年’。其他描述信息没有和职位一一对应。

解决办法:

Xpath在爬取其他描述信息时,先不直接爬取span,而是爬取所需标签内容的上一级。在item处再添加span路径加载详细信息。

修改后的代码如下

# 提取职位名称
names = root.xpath('//a[@class="job-info"]/div[@class="sub-li-top"]/div[@class="sub-li-info"]/p[@class="name"]/text()')
# 提取每个职位的其他描述
descriptions = root.xpath('//a[@class="job-info"]/p[@class="job-text"]')
# 提取薪资情况
salary = root.xpath('//a[@class="job-info"]/div[@class="sub-li-top"]/p[@class="salary"]/text()')
items = []
for name, description,salary in zip(names, descriptions,salary):
    item = {}
    item["职位名称"] = name
    item["其他描述"] = ", ".join(description.xpath('./span/text()'))  # 合并描述为一个字符串
    item["薪资情况"] = salary
    items.append(item)
self.save_file(items)

成功解决
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值