使用XPath格式化Scrapy的面包屑导航

1 投票
1 回答
862 浏览
提问于 2025-04-30 22:44

我正在用Scrapy这个工具爬取一个网站,想把提取出来的面包屑导航格式化成一个网站路径:

这是网站的HTML代码:

<ul id="breadcrumbs"><li><a href="/site/ID/home">Home</a></li> <li><a href="/site/ID/AboutUs">Who We Are</a></li></ul>

我现在做的事情是:

breadcrumb = response.xpath("//ul[@id='breadcrumbs']")[0].extract()

我现在得到的结果是:

<ul id="breadcrumbs"><li><a href="/site/ID/home">Home</a></li> <li><a href="/site/ID/AboutUs">Who We Are</a></li></ul>

我真正需要的结果是:

/home/AboutUs/

有没有人能告诉我该怎么写xpath,或者我该怎么格式化这些结果呢?

暂无标签

1 个回答

2

使用 //ul[@id="breadcrumbs"]/li/a/@href 这个 xpath 可以获取所有的 href 值,然后用 .re() 提取出结尾部分,再用 join 把它们连接起来。

下面是一个来自 scrapy shell 的例子:

$ scrapy shell index.html 
>>> ''.join(response.xpath('//ul[@id="breadcrumbs"]/li/a/@href').re(r'^.*?(/\w+)$'))
u'/home/AboutUs'

^.*?(/\w+)$ 这个表达式会匹配任何字符,后面跟着一个斜杠和一个或多个字母数字字符(包括 _)。这里的问号 ? 表示这是一个“非贪婪”的匹配方式,也就是说它会尽量少匹配字符。括号的作用是 捕获 字符串的最后一部分(斜杠和字母数字字符)。 ^$ 分别表示字符串的开始和结束。

撰写回答