Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python XPath-只获取属性值或文本节点的一部分_Python_Xml_Xpath - Fatal编程技术网

Python XPath-只获取属性值或文本节点的一部分

Python XPath-只获取属性值或文本节点的一部分,python,xml,xpath,Python,Xml,Xpath,好的,我有下面的html,我想从中获取@datacoords属性,但我希望纬度和经度在不同的变量中。见下文: ... 如果我使用//div[@id='gmap-imovel']/@data-coords作为XPath,它将从@data-coords属性返回整个内容 我的Python代码是这样的: xpath={ “parser_lat”:“//div[@id='gmap-value']/@data-coords”, “parser_lon”:”//div[@id='gmap-value']/

好的,我有下面的html,我想从中获取
@datacoords
属性,但我希望纬度和经度在不同的变量中。见下文:


...
如果我使用
//div[@id='gmap-imovel']/@data-coords
作为XPath,它将从
@data-coords
属性返回整个内容

我的Python代码是这样的:

xpath={
“parser_lat”:“//div[@id='gmap-value']/@data-coords”,
“parser_lon”:”//div[@id='gmap-value']/@data-coords”
}
纬度:str=parsel.Selector().xpath(xpaths['parser\u lat'])。extract\u first()
经度:str=parsel.Selector()
返回纬度、经度
我想像上面提到的那样将纬度和经度分开,我知道我可以向Python代码中添加正则表达式来获得我想要的,但是那样会破坏其他网站的管道。使用我不想使用的正则表达式的示例:

regex\u expression=r'^-(\d+\.\d+)
纬度=re.findall(正则表达式,'-26.995548880319042,-48.633818457672135,16150')[0]
经度=re.findall(正则表达式'-26.995548880319042,-48.633818457672135,16150'[1]
上面的这个例子会给出相应变量中的
-26.995548880319042
-48.633818457672135
,但正如我所提到的,这将切断通往其他网站的管道

我只想使用XPath获得上面提到的结果,如下所示:

parser_lat: regex('^-(\d+\.\d+)', //div[@id='gmap-imovel']/@data-coords)[0]
parser_lon: regex('^-(\d+\.\d+)', //div[@id='gmap-imovel']/@data-coords)[1]
然后在我给出的第一个Python代码示例中使用它

我尝试使用
子字符串
,但对我无效。

尝试在您的XPath中使用和

xpath={
“parser_lat”:“前面的子字符串(//div[@id='gmap-value']/@data-coords',,”),
“parser_lon”:“在(//div[@id='gmap-value']/@data-coords,,')之后的子字符串”
}

您所说的“不更改我的代码”是什么意思?显然,你必须改变一些东西来修复它。你可以编辑你的问题,包括使用的完整代码,并指出可以和不能更改的部分吗?我只是编辑了一个更详细的问题,我想要什么,希望你能理解它。我的完整代码太大,无法在这里发布,但第一个代码示例基本相同。如果您想更好地查看我的GitHub存储库,我将在这里发布我的GitHub存储库。Repository:github.com/jakoritarleite/datareal-crawler您想看到的代码部分在
\u scrap
类的
lib/models/crawl.py
中。这对我来说很有效,我以前尝试过使用子字符串,但没有成功,可能我以前做错了什么。
parser_lat
与您共享的相同,但我需要更改
parser_lon
,因为值的末尾有两个以上的逗号与经度不对应。
解析器现在是:
前面的子字符串(后面的子字符串(//div[@id='gmap-value']/@data-coords',,'),'))