cndotaercrazybm 2021-06-21 12:37 采纳率: 85.7%
浏览 84
已采纳

data-value在div中算属性的一种吗?可以直接通过表达式查询吗

我想将套餐中部分可以供选择的值爬取出来,所以先得到了这样的一个集合

import requests
import re
import os
from lxml import etree
from bs4 import BeautifulSoup

if __name__ == "__main__":

    # 爬取页面源码数据
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'
    }   # UA伪装
    url = 'https://item.jd.com/10026876494242.html'

    page = requests.get(url=url, headers=headers)
    page_text = page.text
    soup = BeautifulSoup(page_text,"html.parser")
    choose_list = soup.find_all("div",{"id":"choose-attrs"})
    print(choose_list)

执行后得到

[<div id="choose-attrs">
<div class="li p-choose" data-idx="0" data-type="颜色" id="choose-attr-1">
<div class="dt">选择颜色                                                </div>
<div class="dd">
<div class="item" data-sku="10026876494233" data-value="红色">
<b></b>
<a clstag="shangpin|keycount|product|yanse-红色" href="#none">
<img alt="红色" data-img="1" height="40" src="//img13.360buyimg.com/n9/s40x40_jfs/t1/188751/27/9518/163751/60d01092E2c530e92/1b74c84a46058a5a.jpg" width="40"/><i>红色</i>
</a>
</div>
<div class="item" data-sku="10026876494236" data-value="绿色">

后面太多省略了,然后我想要的就是这个data-value,但是按照自己写的表达式要么报错要么返回为空,该怎么写呢

  • 写回答

2条回答 默认 最新

  • 江天暮雪丨 2021-06-21 13:02
    关注

    个人习惯使用Xpath:

    import requests
    from lxml import etree
    
    if __name__ == "__main__":
        # 爬取页面源码数据
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) '
                          'Chrome/63.0.3239.132 Safari/537.36 '
        }  # UA伪装
        url = 'https://item.jd.com/10026876494242.html'
    
        res = requests.get(url, headers=headers).text
        tree = etree.HTML(res)
    
        # 颜色选择
        attr_1 = tree.xpath('//div[@id="choose-attr-1"]')[0]
        value_list = attr_1.xpath('./div[2]/div/@data-value')  # /@data-value 表示取出该元素的 data-value属性
        print(value_list)
    
        # 版本选择
        attr_2 = tree.xpath('//div[@id="choose-attr-2"]')[0]
        version_list = attr_2.xpath('./div[2]/div/@data-value')
        print(version_list)
    
    # result: ['红色', '绿色', '蓝色', '紫色', '白色', '黑色'] ['64G(官网标配)', '128G(官网标配)', '256G(官网标配)', '128G直播', '256G直播',
    # '64G(套餐一配原装20W闪充套装)', '128G(公开版)', '256G(公开版)', '128G(128G+原装MagSafe磁吸)', '128G (套餐二6期免息)', '128G (套餐二12期免息)',
    # '256G (套餐二12期免息)', '256G(256G+原装MagSafe磁吸)', '128G+Beats Solo3', '256G(套餐二6期免息)'] 
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 做个有关计算的小程序
  • ¥15 MPI读取tif文件无法正常给各进程分配路径
  • ¥15 如何用MATLAB实现以下三个公式(有相互嵌套)
  • ¥30 关于#算法#的问题:运用EViews第九版本进行一系列计量经济学的时间数列数据回归分析预测问题 求各位帮我解答一下
  • ¥15 setInterval 页面闪烁,怎么解决
  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化