XPath Query: get attribute href from a tag

HtmlXpathDomdocument

Html Problem Overview


I want to use XPath to get the href attribute from an a-tag, but it has two occurrences within the same file. How am I getting along? I need to check IF there is an href attribute with value $street/object, I have got this code and it does not work:

$product_photo     = $xpath->query("//a[contains(@href,'{$object_street}fotos/')][1]");
        $product_360       = $xpath->query("//a[contains(@href,'{$object_street}360-fotos/')][1]");
        $product_blueprint = $xpath->query("//a[contains(@href,'{$object_street}plattegrond/')][1]");
        $product_video     = $xpath->query("//a[contains(@href,'{$object_street}video/')][1]");

It does not return anything at all. Who can help me out?

Html Solutions


Solution 1 - Html

For the following HTML document:

<html>
  <body>
    <a href="http://www.example.com">Example</a> 
    <a href="http://www.stackoverflow.com">SO</a> 
  </body>
</html>

The xpath query /html/body//a/@href (or simply //a/@href) will return:

http://www.example.com
http://www.stackoverflow.com
To select a specific instance use /html/body//a[N]/@href,
$ /html/body//a[2]/@href
http://www.stackoverflow.com
To test for strings contained in the attribute and return the attribute itself place the check on the tag not on the attribute:
$ /html/body//a[contains(@href,'example')]/@href
http://www.example.com

Mixing the two:

$ /html/body//a[contains(@href,'com')][2]/@href
http://www.stackoverflow.com

Solution 2 - Html

The answer shared by @mockinterface is correct. Although I would like to add my 2 cents to it.

If someone is using frameworks like scrapy the you will have to use /html/body//a[contains(@href,'com')][2]/@href along with get() like this:

response.xpath('//a[contains(@href,'com')][2]/@href').get()

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionuser3239713View Question on Stackoverflow
Solution 1 - HtmlmockinterfaceView Answer on Stackoverflow
Solution 2 - HtmlRahul SaxenaView Answer on Stackoverflow