LXML XPATH - 从一个站点而不是另一个站点返回的数据

时间:2017-04-21 18:26:46

标签: python html xpath lxml

我只是在学习python,并决定玩一些网站搜索。

我创造了1个有效,而第二个,据我所知几乎完全相同,不起作用,我无法找出原因。

from lxml import html
import requests

page = requests.get('https://thronesdb.com/set/Core')
tree = html.fromstring(page.content)

cards = [tree.xpath('//a[@class = "card-tip"]/text()'),tree.xpath('//td[@data-th = "Faction"]/text()'),
              tree.xpath('//td[@data-th = "Cost"]/text()'),tree.xpath('//td[@data-th = "Type"]/text()'),
              tree.xpath('//td[@data-th = "STR"]/text()'),tree.xpath('//td[@data-th = "Traits"]/text()'),
              tree.xpath('//td[@data-th = "Set"]/text()'),tree.xpath('//a[@class = "card-tip"]/@data-code')]

print(cards)

那个人做了我期望的事情(我知道它并不漂亮)。它从网站上的表格中获取某些元素。

这个返回[[]]

from lxml import html
import requests

page = requests.get('http://www.redflagdeals.com/search/#!/q=baby%20monitor')
tree = html.fromstring(page.content)

offers = [tree.xpath('//a[@class = "offer_title"]/text()')]

print(offers)

我期望它做的是给我一个列表,其中包含页面上每个offer_title元素的文本。

我正在枪杀的xpath我从Firebug抓起来,这是:

  

/ HTML /体/格[1] / DIV / DIV / DIV /部分/ DIV [2] / UL [1] /锂[2] / DIV / H3 / A

以下是该网站的实际字符串:

<a href="/deal/other-kids-babies/angelcare-digital-video-and-sound-monitor-8999-9000-off-9724/" class="offer_title">Angelcare Digital Video And Sound Monitor - $89.99 ($90.00 Off)</a>

我还阅读了其他一些问题,但是他们没有回答第一种方式是如何工作的,而不是第二种方式。由于新帐户的链接限制,无法发布它们。 图书:

  • Python - 无法使用Beautiful来从网页表中检索数据 汤或lxml xpath
  • Python lxml xpath无输出
  • 使用lxml / xpath()
  • 从站点抓取文本时出现问题

任何帮助将不胜感激。我在lxml网站上做了一些关于xpath的阅读,但是我可能会错过我正在构建查询的方式。

谢谢!

1 个答案:

答案 0 :(得分:0)

第一个代码工作的原因是所需数据最初出现在DOM中,而在第二页上所需数据是由JavaScript动态生成的,因此您无法抓取它,因为{{1} }不支持处理动态内容。

您可以尝试使用Selenium + PhantomJS获取所需数据,如下所示:

requests