标签: xpath

为什么我的Scrapy代码返回一个空数组?

我正在为wunderground.com构建网络刮板,但是我的代码返回了inchs_rain和湿度的“ []”值。谁能知道为什么会这样吗?

# -*- coding: utf-8 -*-
import scrapy
from scrapy.selector import Selector
import time

from wunderground_scraper.items import WundergroundScraperItem


class WundergroundComSpider(scrapy.Spider):
    name = "wunderground"
    allowed_domains = ["www.wunderground.com"]
    start_urls = (
        'http://www.wunderground.com/q/zmw:10001.5.99999',
    )

    def parse(self, response):
        info_set = Selector(response).xpath('//div[@id="current"]')
        list = []
        for i in info_set:
            item = WundergroundScraperItem()
            item['description'] = i.xpath('div/div/div/div/span/text()').extract()
            item['description'] = item['description'][0]
            item['humidity'] = i.xpath('div/table/tbody/tr/td/span/span/text()').extract()
            item['inches_rain'] = i.xpath('div/table/tbody/tr/td/span/span/text()').extract()
            list.append(item)
        return list
Run Code Online (Sandbox Code Playgroud)

我也知道湿度和inches_rain项目设置为相同的xpath,但这应该是正确的,因为一旦信息进入数组,我就将它们设置为数组中的某些值。

python xpath scrapy web-scraping scrapy-spider

1
推荐指数
1
解决办法
460
查看次数

带有嵌套兄弟节点的xml到R中的数据框

我是在R中解析XML的新手.我正在尝试将XML解析为可行的数据框.我已经尝试了XML包中的一些XPath函数,但似乎无法得出正确的答案.

这是我的XML:

<ResidentialProperty>
    <Listing>
      <StreetAddress>
        <StreetNumber>11111</StreetNumber>
        <StreetName>111th</StreetName>
        <StreetSuffix>Avenue Ct</StreetSuffix>
        <StateOrProvince>WA</StateOrProvince>
      </StreetAddress>
      <MLSInformation>
        <ListingStatus Status="Active"/>
        <StatusChangeDate>2015-07-05T23:48:53.410</StatusChangeDate>
      </MLSInformation>
      <GeographicData>
        <Latitude>11.111111</Latitude>
        <Longitude>-111.111111</Longitude>
        <County>Pierce</County>
      </GeographicData>
      <SchoolData>
        <SchoolDistrict>Puyallup</SchoolDistrict>
      </SchoolData>
      <View>Territorial</View>
    </Listing>
    <YearBuilt>1997</YearBuilt>
    <InteriorFeatures>Bath Off Master,Dbl Pane/Storm Windw</InteriorFeatures>
    <Occupant>
      <Name>Vacant</Name>
    </Occupant>
    <WaterFront/>
    <Roof>Composition</Roof>
    <Exterior>Brick,Cement Planked,Wood,Wood Products</
</ResidentialProperty>
Run Code Online (Sandbox Code Playgroud)

当我跑:

ResidentialProperty <- xmlToDataFrame(nodes=getNodeSet(doc,"//ResidentialProperty"))
Run Code Online (Sandbox Code Playgroud)

父节点中子节点的值被压缩为:

11111111thAvenue CtWA2015-07-05T23:48:53.41011.111111-111.111111PiercePuyallupTerritorial
Run Code Online (Sandbox Code Playgroud)

如果我向下移动一个节点,则会发生同样的事情:

11111111thAvenue CtWA
Run Code Online (Sandbox Code Playgroud)

子节点的值全部粘贴在一起.

我也试过一种有点工作的蛮力方法:

StreetAddress <- xmlToDataFrame(nodes=getNodeSet(doc,"//StreetAddress"))
MLSInformation <- xmlToDataFrame(nodes=getNodeSet(doc,"//MLSInformation"))
GeographicData <- xmlToDataFrame(nodes=getNodeSet(doc,"//GeographicData"))
SchoolData <- xmlToDataFrame(nodes=getNodeSet(doc,"//SchoolData"))
YearBuilt <- xmlToDataFrame(nodes=getNodeSet(doc,"//YearBuilt"))
InteriorFeatures <- xmlToDataFrame(nodes=getNodeSet(doc,"//InteriorFeatures"))
Occupant <- xmlToDataFrame(nodes=getNodeSet(doc,"//Occupant"))
Roof <- xmlToDataFrame(nodes=getNodeSet(doc,"//Roof"))
Exterior <- xmlToDataFrame(nodes=getNodeSet(doc,"//Exterior")) …
Run Code Online (Sandbox Code Playgroud)

xml xpath r dataframe xml-parsing

1
推荐指数
1
解决办法
1204
查看次数

XPath选择不同命名空间中的节点

我需要一些帮助来提出一个适当的XPath表达式来从XML中提取值.

我可以使用jaxb获取值,但是我需要xpath,因为我有一个决策表类型的映射规则,我想要外部化,如果我使用jaxb将导致很多嵌套的if/else语句,我想避免,因此需要xpath方法.

我有一个xml文件,至少有4个模式构建.我的意思是根模式在特定点有一个元素,表示xs:any,在这个位置注入一个基于不同模式的xml,这反过来又有一个类似的xs:any注入另一个xml来构建final /我使用的实际xml.

这是我正在处理的实际XML结构(我故意修改了值).下面xml中的两个Document节点基于不同的模式

<?xml version="1.0"?>
<env:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:env="CDTS-SUBMIT">
  <env:Body>
    <cdtPrefix>
      <cdtprVersion>01</cdtprVersion>
      <cdtprOperation>SUBMIT</cdtprOperation>
      <cdtprFunction>GCAMS1O</cdtprFunction>
      <cdtprDirectionFlag>O</cdtprDirectionFlag>
    </cdtPrefix>
    <cdtDataDescription>
      <cdtddVersion>01</cdtddVersion>
      <cdtddFirmId>ABC</cdtddFirmId>
      <cdtddBusinessDataFormat>GCAMS1O-XML</cdtddBusinessDataFormat>
      <cdtddReferenceNum>123</cdtddReferenceNum>
      <cdtddTrackingNum>123</cdtddTrackingNum>
      <cdtddDestination>AQ</cdtddDestination>
      <cdtddSeqNum>0000000</cdtddSeqNum>
      <cdtddCycleNum>00</cdtddCycleNum>
      <cdtddBusinessDate>00000000</cdtddBusinessDate>
    </cdtDataDescription>
    <cdtBusinessData>
      <AppHdr xmlns="urn:iso:std:iso:20022:tech:xsd:head.001.001.01" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
        <Fr>
          <FIId>
            <FinInstnId>
              <BICFI>ABC</BICFI>
            </FinInstnId>
          </FIId>
        </Fr>
        <To>
          <FIId>
            <FinInstnId>
              <BICFI>ABC   </BICFI>
            </FinInstnId>
          </FIId>
        </To>
        <BizMsgIdr>ABC</BizMsgIdr>
        <MsgDefIdr>seev.031.002.05</MsgDefIdr>
        <BizSvc>CSD</BizSvc>
        <CreDt>9999-99-99T00:02:17Z</CreDt>
      </AppHdr>
      <Document xmlns="urn:swift:xsd:seev.031.002.05" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
        <CorpActnNtfctn>
          <NtfctnGnlInf>
            <NtfctnTp>REPL</NtfctnTp>
            <PrcgSts>
              <Cd>
                <EvtCmpltnsSts>COMP</EvtCmpltnsSts>
                <EvtConfSts>CONF</EvtConfSts>
              </Cd>
            </PrcgSts>
          </NtfctnGnlInf>
          <PrvsNtfctnId>
            <Id>00000000</Id>
          </PrvsNtfctnId>
          <EvtsLkg>
            <EvtId>
              <LkdOffclCorpActnEvtId>US8</LkdOffclCorpActnEvtId>
            </EvtId>
            <LkgTp>
              <Cd>INFO</Cd>
            </LkgTp>
          </EvtsLkg>
          <CorpActnGnlInf>
            <CorpActnEvtId>000</CorpActnEvtId>
            <OffclCorpActnEvtId>US7</OffclCorpActnEvtId> …
Run Code Online (Sandbox Code Playgroud)

xml xpath jxpath

1
推荐指数
1
解决办法
1950
查看次数

使用XPath在PHP中提取XML

我有以下XML:

<root>
   <level name="level1">
       <!-- More children <level> --> 
   </level>

   <level name="level2"> 
       <!-- Some more children <level> --> 
   </level> 
</root>
Run Code Online (Sandbox Code Playgroud)

我怎样才能<level>直接提取一个,<root>以便我可以运行一个XPath查询,例如$xml->xpath('//some-query')相对于所提取的<level>

php xml xpath

1
推荐指数
2
解决办法
3928
查看次数

如何提取XPath指向的所有值?

我有以下xml

<test>
    <nodeA>
           <nodeB>key</nodeB>
           <nodeC>value1</nodeC>
    </nodeA>
    <nodeA>
           <nodeB>key</nodeB>
           <nodeC>value2</nodeC>
    </nodeA>
</test>
Run Code Online (Sandbox Code Playgroud)

如何连接并获取xpath中的所有值/test/nodeA/nodeC?我在这种情况下的预期输出是value1value2

我不确定从我读过的内容可以用xpath,但谢谢你的帮助.

PS:我使用Ximpleware的VTD-XML在Java中解析它.任何基于Java的解决方案也欢迎.目前我的java解决方案只提供第一个值,即value1

java xml xpath vtd-xml

1
推荐指数
1
解决办法
206
查看次数

Schematron验证多个元素

假设我有一个XML文档定义:

<people>

  <person>
    <city>London</city>
  </person>
  <person>
    <city>Paris</city>
  </person>

</people>
Run Code Online (Sandbox Code Playgroud)

我想要一个检查每个人住在伦敦的图示器.

我试过了:

<sch:rule context="people">
            <sch:assert test="person/city = 'London'">Everybody must live in London!</sch:assert>
 </sch:rule>
Run Code Online (Sandbox Code Playgroud)

但是,只要有一个人居住在伦敦,这种情况就会恢复正常.有没有办法告诉schematron将测试应用于匹配XPathcondition人/城市的每个元素?

xml xpath xquery schematron

1
推荐指数
1
解决办法
802
查看次数

java xpath从xml中删除元素

我正在尝试从xml文件中删除元素和子元素。特别是名称为Testlogging的追加程序。

首先,这是我的xml文件的外观。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="null" threshold="null">

<appender class="DailyLogFileAppender" name="Testlogging">
    <param name="encoding" value="UTF-8"/>
    <param name="MaxFileSize" value="100MB"/>
    <param name="MaxBackupIndex" value="2"/>
    <param name="rootDir" value="c:\Logs"/>
    <param name="componentId" value="Testlogging"/>
    <param name="DatePattern" value="yyyyMMdd"/>
    <layout class="SyslogPatternLayout">
        <param ConversionPattern="%d{yyyy-MM-dd'T'HH:mm:ss.SSSZ} [%-5p] {%t} %c [%D] - %m%n"/>
    </layout>
</appender>
Run Code Online (Sandbox Code Playgroud)

这是我的Java代码:

DocumentBuilderFactory dbfact = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = dbfact.newDocumentBuilder();
Document d = builder.parse(xmlFile);
        XPath xp = XPathFactory.newInstance().newXPath();
        NodeList nl = (NodeList)xp.compile("//appender").evaluate(d,XPathConstants.NODESET);

        for(int i = 0; i < nl.getLength(); i++)
        {
            if(xp.compile("./@name").evaluate(nl.item(i)).equals("Testlogging"))
            {
                Node node …
Run Code Online (Sandbox Code Playgroud)

java xml xpath removechild

1
推荐指数
1
解决办法
3985
查看次数

使用Python请求提取href URL

我想使用python中的request包从xpath提取URL。我可以得到文本,但没有尝试给出URL。有人可以帮忙吗?

ipdb> webpage.xpath(xpath_url + '/text()')
['Text of the URL']
ipdb> webpage.xpath(xpath_url + '/a()')
*** lxml.etree.XPathEvalError: Invalid expression
ipdb> webpage.xpath(xpath_url + '/href()')
*** lxml.etree.XPathEvalError: Invalid expression
ipdb> webpage.xpath(xpath_url + '/url()')
*** lxml.etree.XPathEvalError: Invalid expression
Run Code Online (Sandbox Code Playgroud)

我使用本教程开始学习:http : //docs.python-guide.org/en/latest/scenarios/scrape/

看起来应该很容易,但是在搜索过程中什么都没有发生。

谢谢。

python xpath lxml python-3.x python-requests

1
推荐指数
2
解决办法
1万
查看次数

selenium中的WebElement选择attr

我喜欢使用seleniumin 在页面中选择此标记java

<input class="btn btn-success addReportBtn" type="submit" />
Run Code Online (Sandbox Code Playgroud)

这是我到目前为止所尝试的:

driver.findElement(By.xpath("//input[type=submit]"));
driver.findElement(By.cssSelector("//input[@type='submit']"));
Run Code Online (Sandbox Code Playgroud)

我分别得到了这两个例外:

org.openqa.selenium.NoSuchElementException:没有这样的元素:无法定位元素:{"method":"xpath","selector":"input [type = submit]"}

org.openqa.selenium.InvalidSelectorException:无效的选择器:指定了无效或非法的选择器

如果我使用Jsoup我可以通过以下方式轻松实现:

System.out.println(document.select("input[type=submit]"));
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

java selenium xpath css-selectors

1
推荐指数
1
解决办法
168
查看次数

当被告知返回false时,模板返回true()

为什么我从该模板作为返回值成为真:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
	<xsl:template name="return-false">
		<xsl:value-of select="false()"/>
	</xsl:template>
	<xsl:template match="/">
		<root>
			<xsl:variable name="call-template">
				<xsl:call-template name="return-false"/>
			</xsl:variable>
			<xsl:if test="$call-template = true()">
				<FALSE/>
			</xsl:if>
		</root>
	</xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)
猜猜我在输出文档FALSE元素上得到了什么。我想知道我应该哭还是应该为在这个简单例子上的奋斗而笑。我的挫败感冲天而起。

xml xslt xpath

1
推荐指数
1
解决办法
1448
查看次数