首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >:如果没有Xpath,跳过Xpath

:如果没有Xpath,跳过Xpath
EN

Stack Overflow用户
提问于 2016-10-19 11:29:08
回答 2查看 840关注 0票数 0

我有这个代码,它为我刮了几百页。但是,有时a的xpath根本不存在,我如何才能编辑它,这样脚本就不会停止运行,继续运行以获得b,并为特定的页面提供这些信息?

代码语言:javascript
复制
`a = response.xpath("//div[@class='headerDiv']/a/@title").extract()[0]
b = response.xpath("//div[@class='headerDiv']/text()").extract()[0].strip()
items['title'] = a + " " + b
yield items`
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-19 11:43:31

只需检查extract()的结果即可。

代码语言:javascript
复制
nodes = response.xpath("//div[@class='headerDiv']/a/@title").extract()
a = nodes[0] if nodes else ""

nodes = response.xpath("//div[@class='headerDiv']/text()").extract()
b = nodes[0].strip() if nodes else ""

items['title'] = a + " " + b
yield items

在Padraic Cunningham的忠告下:

代码语言:javascript
复制
a = response.xpath("//div[@class='headerDiv']/a/@title").extract_first(default='')
b = response.xpath("//div[@class='headerDiv']/text()").extract_first(default ='').strip() 
items['title'] = (a + " " + b).strip()
yield items
票数 1
EN

Stack Overflow用户

发布于 2016-10-19 12:06:00

您可以如下所示:

代码语言:javascript
复制
import lxml.etree as etree

parser = etree.XMLParser(strip_cdata=False, remove_comments=True)
root = etree.fromstring(data, parser)

#Take Hyperlink as per xpath:
#But Xpath returns list of element so we have to take 0 index of it if it has element

a = root.xpath("//div[@class='headerDiv']/a/@title")
b = response.xpath("//div[@class='headerDiv']/text()")

if a:
    items['title'] = a[0].strip() + " " + b[0].strip() 
else:
    items['title'] = b[0].strip() 

yield items
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40130194

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档