美文网首页
scrapy 无法xpath到data-Xxx的问题解决排查及解

scrapy 无法xpath到data-Xxx的问题解决排查及解

作者: 捉虫少年 | 来源:发表于2020-11-04 11:27 被阅读0次

    最近遇到了个问题,采集属性时无论怎么也采集不到,不断地检查属性是否拼写错误,也修改过xpath的语法,查看各类文章,无果,想放弃直接使用正则来解决问题,但,最终还是一步步排查解决了问题;

    记录一下,也为遇到同样问题的同行提供一个思路;

    需要采集的内容如下

    ... 省略
    <div class="media media-loc" onclick="GetDr(this)" data-deptId="88209" data-targetId="202265" data-targetType="1" data-regLevelId="15" data-regLevelName="二级专家" data-second="亚专业:慢阻肺门诊">
            <div hidden="hidden">
                <div class="media-left media-left-loc" style="float:left;margin-top: 5px">
                    <img class="media-object img-loc" src="http://scrmoss.daxiang91.com/img/dept_normal.png"/>
                </div>
    ... 省略
    
    • 需求是采集div属性中的data-targetId、data-targetType、data-regLevelId
      采集的代码如下
            div_list = response.xpath('//div[contains(@class,"media-loc")]')
            for div in div_list:
                doc_id = div.xpath('./@data-targetId').extract_first()
                targetType = div.xpath('./@data-targetType').extract_first()
                regLevelId = div.xpath('./@data-regLevelId').extract_first()
                print doc_id, targetType, regLevelId
    

    结果

    None None None
    ...
    

    经过确认编写没有任何问题后,开始了排查,以下是结果

    • 直接打印采集的属性内容,看看有没有问题
    # 代码中加入这句
    print div.extract()
    

    以下是打印结果

    <div class="media media-loc" onclick="GetDr(this)" data-deptid="88209" data-targetid="202265" data-targettype="1" data-reglevelid="15" data-reglevelname="二级专家" data-second="亚专业:慢阻肺门诊">
            <div hidden="hidden">
                <div class="media-left media-left-loc" style="float:left;margin-top: 5px">
                    <img class="media-object img-loc" src="http://scrmoss.daxiang91.com/img/dept_normal.png"></div>
    

    可以看出,Selector在加载内容的时候将标签属性转成了小写(data-targetid、data-targettype、data-reglevelid)

    这样问题就相当明确了,将程序改为

            div_list = response.xpath('//div[contains(@class,"media-loc")]')
            for div in div_list:
                doc_id = div.xpath('./@data-targetid').extract_first()
                targetType = div.xpath('./@data-targettype').extract_first()
                regLevelId = div.xpath('./@data-reglevelid').extract_first()
                print doc_id, targetType, regLevelId
    

    输出正常!

    相关文章

      网友评论

          本文标题:scrapy 无法xpath到data-Xxx的问题解决排查及解

          本文链接:https://www.haomeiwen.com/subject/metgvktx.html