最近遇到了个问题,采集属性时无论怎么也采集不到,不断地检查属性是否拼写错误,也修改过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
输出正常!
网友评论