运行环境:
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 都不存在的情况下)。
请问各位爬虫牛人,有什么办法能解决这个问题? 感谢。
|  |      1Shared      2015-09-06 13:39:47 +08:00 用顺序确定变量肯定不靠谱的,你可以换个思路,想想用别的属性、内容来确定变量 | 
|  |      2ooh      2015-09-06 13:59:35 +08:00 通过搜索关键字来确定属性是属于第几个,如果这个没法实现,教你一个 100%有效的方法,那就是人眼识别. | 
|      3agenge OP @Shared 感谢回复。   想过一个办法,即每次判断 <strong>属性 4</strong> ,如果等于 属性 4 ,即赋值给对应的变量。否则继续判断是否等于属于 5 、等于属于 6 ,不过这样效率非常低,有几十个类似的属性。 | 
|  |      5shoaly      2015-09-06 15:00:49 +08:00 换成 pyquery  然后就可以很 happy 的 $(".a li strong") 了 | 
|  |      6wlsnx      2015-09-06 17:45:48 +08:00 你是怎么判断它有没有属性 1 的?把这个过程写成程序。 |