2016-05-15 3 views
0

Я пытаюсь извлечь ссылки из подобных приложений от Google playstore отсюда (используя XPath)XPath для извлечения ссылки или hrefs

https://play.google.com/store/apps/details?id=com.mojang.minecraftpe 

Ниже приведен скриншот ссылки (отмеченное зеленым), которые я хотел экстракт enter image description here

HTML образец

<div class="details"> 
    <a href="/store/apps/details?id=com.imangi.templerun" class="card-click-target"></a> 
    <a title="Temple Run" href="/store/apps/details?id=com.imangi.templerun" class="title">Temple Run 
    <span class="paragraph-end"/> 
    </a> 
    <div>....</div> 
    <div>....</div> 
</div> 

Я использовал ниже XPath в chrome console, чтобы найти одну ссылку, но это сделать esnt возвращает атрибут href тега. но для других атрибутов он работает (например, «title»).

Ниже XPath не работает (экстракт "HREF")

//*[@id="body-content"]/div/div/div[2]/div[1]//*/a[2]/@href 

Ниже XPATH работ (экстракт "заголовка")

//*[@id="body-content"]/div/div/div[2]/div[1]//*/a[2]/@title 

enter image description here

код Python

ответ

0

HTML из отдельные плитки справа от связанной страницы находятся в следующей форме *:

<div class="details"> 
    <a href="/store/apps/details?id=com.imangi.templerun" class="card-click-target"></a> 
    <a title="Temple Run" href="/store/apps/details?id=com.imangi.templerun" class="title">Temple Run 
    <span class="paragraph-end"/> 
    </a> 
    <div>....</div> 
    <div>....</div> 
</div> 

Оказалось, что <a> элемент с class="title" однозначно идентифицировать вашу целевую <a> элементы этой страницы. Таким образом, XPath может быть столь же просто, как:

//a[@class="title"]/@href 

Во всяком случае, проблема, которую вы заметили, кажется, специфичными для оценщика Chrome XPath **. Поскольку вы упомянули о Python, простые коды Python доказывает, что XPath должно работать нормально:

>>> from urllib2 import urlopen 
>>> from lxml import html 
>>> req = urlopen('https://play.google.com/store/apps/details?id=com.mojang.minecraftpe') 
>>> raw = req.read() 
>>> root = html.fromstring(raw) 
>>> [h for h in root.xpath("//a[@class='title']/@href")] 
['/store/apps/details?id=com.imangi.templerun', '/store/apps/details?id=com.lego.superheroes.dccomicsteamup', '/store/apps/details?id=com.turner.freefurall', '/store/apps/details?id=com.mtvn.Nickelodeon.GameOn', '/store/apps/details?id=com.disney.disneycrossyroad_goo', '/store/apps/details?id=com.rovio.angrybirdsstarwars.ads.iap', '/store/apps/details?id=com.rovio.angrybirdstransformers', '/store/apps/details?id=com.disney.dinostampede_goo', '/store/apps/details?id=com.turner.atskisafari', '/store/apps/details?id=com.moose.shopville', '/store/apps/details?id=com.DisneyDigitalBooks.SevenDMineTrain', '/store/apps/details?id=com.turner.copatoon', '/store/apps/details?id=com.turner.wbb2016', '/store/apps/details?id=com.tov.google.ben10Xenodrome', '/store/apps/details?id=com.turner.ggl.gumballrainbowruckus', '/store/apps/details?id=com.lego.starwars.theyodachronicles', '/store/apps/details?id=com.mojang.scrolls'] 

*) урезанная версия. Вы можете принять это как пример предоставления минимального образца HTML.

**) Я могу воспроизвести эту проблему, что @href s напечатаны как пустая строка на моей консоли Chrome. Аналогичная проблема возникла и с другими: Chrome element inspector Xpath with @href won't show link text

Смежные вопросы