1

lxml が、調べている xml の一部を解析し、他のビットを解析しない理由を理解しました。

次のスニペットが機能し、必要なすべてのタイトルが表示されます。

doc = lh.fromstring(resp)
for product in doc.xpath('.//item'):
    prices = product.xpath(".//title/text()")

ただし、単純な変更

doc = lh.fromstring(resp)
for product in doc.xpath('.//item'):
    prices = product.xpath(".//itemId/text()")

また

doc = lh.fromstring(resp)
for product in doc.xpath('.//item'):
    prices = product.xpath(".//globalId/text()")

空の結果の数として価格を返すだけです。

以下の XML...

<findItemsByProductResponse>
  <ack>Success</ack>
  <version>1.12.0</version>
  <timestamp>2013-02-04T13:35:57.106Z</timestamp>
  <searchResult count="31">
    <item>
      <itemId>130842622974</itemId>
      <title>BONES - COMPLETE SEASON 4 - BLURAY</title>
      <globalId>EBAY-US</globalId>
    <primaryCategory>
      <categoryId>617</categoryId>
      <categoryName>DVDs & Blu-ray Discs</categoryName>
    </primaryCategory>
    <galleryURL>
      http://thumbs3.ebaystatic.com/m/mnuTBPOWZ-6F4kIHS1mj3gg/140.jpg
    </galleryURL>
    <viewItemURL>
      http://www.ebay.com/itm/BONES-COMPLETE-SEASON-4-BLURAY-/130842622974?pt=US_DVD_HD_DVD_Blu_ray
    </viewItemURL>
    <productId type="ReferenceID">78523575</productId>
    <paymentMethod>PayPal</paymentMethod>
    <autoPay>false</autoPay>
    <postalCode>60544</postalCode>
    <location>Plainfield,IL,USA</location>
    <country>US</country>
    <shippingInfo>
      <shippingServiceCost currencyId="USD">0.0</shippingServiceCost>
      <shippingType>Free</shippingType>
      <shipToLocations>Worldwide</shipToLocations>
      <expeditedShipping>true</expeditedShipping>
      <oneDayShippingAvailable>false</oneDayShippingAvailable>
      <handlingTime>1</handlingTime>
    </shippingInfo>
    <sellingStatus>
      <currentPrice currencyId="USD">12.99</currentPrice>
      <convertedCurrentPrice currencyId="USD">12.99</convertedCurrentPrice>  
      <sellingState>Active</sellingState>
      <timeLeft>P3DT23H12M7S</timeLeft>
    </sellingStatus>
    <listingInfo>
      <bestOfferEnabled>false</bestOfferEnabled>
      <buyItNowAvailable>false</buyItNowAvailable>
      <startTime>2013-01-29T12:48:04.000Z</startTime>
      <endTime>2013-02-08T12:48:04.000Z</endTime>
      <listingType>FixedPrice</listingType>
      <gift>false</gift>
    </listingInfo>
    <returnsAccepted>true</returnsAccepted>
    <condition>
      <conditionId>1000</conditionId>
      <conditionDisplayName>Brand New</conditionDisplayName>
    </condition>
    <isMultiVariationListing>false</isMultiVariationListing>
    <topRatedListing>true</topRatedListing>
  </item>

ps 追加のボーナスとして、次のステップとして、convertedCurrentPrice を見つけることを検討します (一度に 1 つの謎を解決する必要があると考えました) - 使用するコードは次のようになります

doc = lh.fromstring(resp)
for product in doc.xpath('.//item'):
    prices = product.xpath(".//sellingStatus/convertedCurrentPrice/text()")

それは正しいと思われますか、それともこれを行うためのより良い方法はありますか?

ありがとう、

マット

4

1 に答える 1

3

タグを小文字に変換するitemidと思うので、 で試してください。lxmlまた、使用しない理由:

doc.xpath('.//item/itemid/text()")
于 2013-02-04T14:23:39.987 に答える