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

2020-11-04  本文已影响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_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

输出正常!

上一篇下一篇

猜你喜欢

热点阅读