0

我是 Xpath 的新手,试图用以下格式抓取网站:

<div class="top">
    <a> tittle_name </a>
    <div class="middle"> listed_date </div>
    <div class="middle"> listed_value </div>
</div>
<div class="top">
    <a> tittle_name </a>
    <div class="middle"> listed_date </div>
</div>
<div class="top">
    <a> tittle_name </a>
    <div class="middle"> listed_value </div>
</div>

listed_value 和listed_date 的存在是可选的。

我需要将每个 title_name 与相应的listed_date、listed_value (如果可用)分组,然后将到达记录插入MySQL。

我正在使用scrapy shell,它提供了一些基本示例,例如

listings = hxs.select('//div[@class=\'top\']')
for listing in listings:
    tittle_name = listing.select('/a//text()').extract()
    date_values = listing.select('//div[@class=\'middle\']')

上面的代码给了我 title_name 列表和可用的listed_date、listed_value 的列表,但是如何匹配它们?(我们不能按索引,因为格式不是对称的)。

谢谢。

4

2 回答 2

1

请注意,这些 XPath 表达式是绝对的:

/a//text()

//div[@class=\'middle\']

您需要像这样的相对 XPath 表达式:

a

div[@class=\'middle\']

第二。在 (X)HTML 之类的混合内容模型中选择文本节点不是一个好主意。string()您应该使用正确的 DOM 方法或函数提取字符串值。(在最后一种情况下,您需要评估每个节点的表达式,因为隐式节点集转换为单例节点集)

于 2011-03-17T16:11:01.353 回答
0

好吧,由于网站没有指定 a 中的div[@class='middle']内容是日期还是值,因此您必须编写自己的决定方式。

我猜日期有一些特定的格式,你可以用一些分析来匹配,也许使用正则表达式。

listed_date您能否更具体地说明and的可能值listed_value

于 2011-03-17T15:43:46.963 回答