使用XPath格式化Scrapy的面包屑导航
我正在用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+)$
这个表达式会匹配任何字符,后面跟着一个斜杠和一个或多个字母数字字符(包括 _
)。这里的问号 ?
表示这是一个“非贪婪”的匹配方式,也就是说它会尽量少匹配字符。括号的作用是 捕获 字符串的最后一部分(斜杠和字母数字字符)。 ^
和 $
分别表示字符串的开始和结束。