运行环境:
OS : CentOS 6 64 位
Scrapy 1.0.3
Python 2.7.4
需求:
http://ip/a.html
<div class="a">
<ul>
<li>
<strong>属性 1</strong>
内容 1
</li>
<li>
<strong>属性 2</strong>
内容 2
</li>
<li>
<strong>属性 3</strong>
内容 3
</li>
...
<ul>
</div>
文件 2 : http://ip/b.html:
<div class="a">
<ul>
<li>
<strong>属性 1</strong>
内容 1
</li>
<li>
<strong>属性 3</strong>
内容 3
</li>
<li>
<strong>属性 4</strong>
内容 3
</li>
<li>
<strong>属性 5</strong>
内容 3
</li>
...
<ul>
</div>
'//div[@class="a"]/ul/li[1]/text ()' # 提取第一个 li
'//div[@class="a"]/ul/li[2]/text ()' # 提取第二个 li
每一个属性的内容将会赋值给对应的变量,例如属性 1 就赋值给 var1 ,属性 2 就赋值给 var2 , var1 和 var2 最终会写入 DB 。
此处最关键的问题在于 某些页面的第二个<li>并不一定就是属性 2 ,有可能是属性 3 ,这样就会造成提取到的第二个<li>会赋值给 var3 (在属性 2 不存在的情况下),甚至是 var4 (在属性 1 属性 2 都不存在的情况下)。
请问各位爬虫牛人,有什么办法能解决这个问题? 感谢。
1
Shared 2015-09-06 13:39:47 +08:00
用顺序确定变量肯定不靠谱的,你可以换个思路,想想用别的属性、内容来确定变量
|
2
ooh 2015-09-06 13:59:35 +08:00
通过搜索关键字来确定属性是属于第几个,如果这个没法实现,教你一个 100%有效的方法,那就是人眼识别.
|
3
agenge OP @Shared 感谢回复。
想过一个办法,即每次判断 <strong>属性 4</strong> ,如果等于 属性 4 ,即赋值给对应的变量。否则继续判断是否等于属于 5 、等于属于 6 ,不过这样效率非常低,有几十个类似的属性。 |
5
shoaly 2015-09-06 15:00:49 +08:00
换成 pyquery 然后就可以很 happy 的 $(".a li strong") 了
|
6
wlsnx 2015-09-06 17:45:48 +08:00
你是怎么判断它有没有属性 1 的?把这个过程写成程序。
|