在Scrapy中解析相邻的项目

时间:2013-09-21 02:29:12

标签: python beautifulsoup screen-scraping scrapy

Scrapy和Python仍然有点新,所以希望得到一些指导。现在我正在尝试使用默认的lxml解决这个问题,但我听说BeautifulSoup也很好。如果他们能够更轻松地尝试其他选择器,请打开。

我正在尝试抓取一个有很糟糕结构的html对象。对象的细节不是嵌套在与其名称相同的结构中(没有div或任何东西)。我不知道如何提取节点,然后从相邻节点(而不是从嵌套元素)中提取细节

目前定义如下:

<!--first item-->
<h2 class="name">
    <a href="link">Name goes here</a>
</h2>
<table>
<tbody>
    <tr>
        <th>ID</th>
        <td><a href="link">123456</a></td>
    </tr>
    <tr>
        <th>Description</th>
        <td>More details here</td>
    </tr>
    <tr>
        <th>Date</th>
        <td>1/1/13</td>
    </tr>
</tbody>
</table>
<!-- end first item -->

<hr>

<!--second item-->
<h2 class="name">
   <a href="link">Name goes here</a>
</h2>
<table>
<tbody>
    <tr>
        <th>ID</th>
        <td><a href="link">123456</a></td>
....

注意ID,描述和日期如何不与名称嵌套在同一个div中。此外,第二项与第一项的名称和详细信息相邻。

对此有任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:2)

你想要following-sibling。如:

hxs.select("//th[text()='ID']/following-sibling::td[1]/a/@href")