Scrapy:如何用条件刮掉表内的链接

时间:2017-07-18 00:21:22

标签: python-3.x xpath scrapy scrapy-spider

我是python和scrapy的新手,我必须抓一个完全用桌子建造的网站(差不多有80张桌子)。

网站的结构是这样的:

<table>
<tr>
<td class="header" colspan="2">something</td>
</tr>

</table>
<br/>
<table> 
<tr>
<td class="header" colspan="2">something2</td>
</tr>

</table>
<br/>
<table>
<tr> 
<td class="header" colspan="2">something3</td>
</tr>
</table>

但是在其中一个表中有一个成员列表,我需要提取每个成员的配置文件信息,但每个配置文件都是可变的,因此根据隐私设置,表及其信息会发生变化。 / p>

我需要刮的表是这样的,但有许多成员:

<table>
            <tr>
                <td colspan="4" class="header">members</td>
            </tr>
            <tr>
                <td class="title">Name</td>
                <td class="title">position</td>
                <td class="title">hours</td>
                <td class="title">observ</td>
            </tr>

            <tr>
                <td class="c1">       
                    1.- <a href="http://profiletype1" target="_blank">Homer Simpson</a>
                </td>
                <td class="c1">
                    safety inspector
                </td>
                <td class="c1">
                    10
                </td>
                <td class="c1">
                    Neglect his duties
                </td>
            </tr>
<table>

然后我查看了代码,我注意到有两种类型的配置文件,而使用xpath的查询不会相互交叉。

然后问题是如何提取每个成员的个人资料信息,考虑到当我打开链接时,我可以找到两种不同类型的个人资料。我想我需要一个像这样的代码

def parse(self, response):
if this xpath query doesn't work
try this one

1 个答案:

答案 0 :(得分:0)

我认为你已经回答了你的问题,解决方案对我来说非常具体,能够给出正确答案。无论如何,我会试着让你知道我将如何处理这个问题。

def parse(self, respose):
    test = response.xpath("//some expression that only works in method one").extract_first()
    if test is not None:
      return self.parse_with_method_one(response)
    return self.parse_with_method_two(response)

def parse_with_method_one(self, response):
    # your logic

def parse_with_method_two(self, response):
    # your logic