【问题标题】:LXml Xpath processing of multi-line fieldLXml Xpath 处理多行字段
【发布时间】:2010-08-12 17:36:16
【问题描述】:

我正在对页面进行一些抓取,并且可以获取大多数字段,但地址有些问题。

<address>
  56 South Ave
  <br>
  Miami, FL 33131
  <br>
</address>

address = myWebPage.xpath("//div[contains(@class,'rightcol')]//address")

我可以使用上面的代码获得第一行,56 South Avenue。但我找不到城市、州、邮编。如何更改代码以获取完整地址?

【问题讨论】:

    标签: xpath screen-scraping lxml


    【解决方案1】:
    //div[contains(@class,'rightcol')]//address/text()[1]
    

    选择address的第一个文本节点子节点:

    "  
      56 South Ave   
      "
    
    //div[contains(@class,'rightcol')]//address/text()[2]
    

    选择address的第二个文本节点子节点:

    "       
      Miami, FL 33131       
      "
    
    //div[contains(@class,'rightcol')]//address/text()
    

    选择address 的两个文本节点子节点。

    【讨论】:

    • 非常感谢德米特。有用。给你的另一个问题:虽然当我选择 node1 或 node2 时我得到了很好的结果,但我意识到如果我做 //address/text(),我的结果会提前终止。我只有 3 个结果,而地址有 10 个孩子。这可能是由于地址中存在额外的非字母数字字符。我不确定。我通常会做一些正则表达式解析,但不确定我是否可以在 xpath 函数中做到这一点。您通常如何处理多行数据以确保结果格式正确?
    • @DevX: //address/text() 选择所有作为address 元素的立即子节点的文本节点。如果您需要任何 address 节点的所有文本节点 *descendents`,请使用://address//text()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-22
    相关资源
    最近更新 更多