[Python]从Steam中获取XPath值并打印出来



我想从Steamstoresite获得XPATH值,例如。http://store.steampowered.com/app/234160/.右边是两个盒子。第一个包含标题,流派,开发者。。。我只需要这里的流派。每场比赛都有不同的计数。有些有4种流派,有些只有一种。然后还有另一个区块,其中的游戏功能是列表(如单人、多人、Coop、Gamepad…(

我需要所有这些价值观。有时,(PEGI/USK(之间也有图像http://store.steampowered.com/app/233290.

import requests
from lxml import html
page = requests.get('http://store.steampowered.com/app/234160/')
tree = html.fromstring(page.text)
blockone = tree.xpath(".//*[@id='main_content']/div[4]/div[3]/div[2]/div/div[1]")
blocktwo = tree.xpath(".//*[@id='main_content']/div[4]/div[3]/div[2]/div/div[2]")
print "Detailblock:" , blockone
print "Featureblock:" , blocktwo

这是我目前掌握的代码。当我尝试它时,它只会打印:

Detailblock: [<Element div at 0x2ce5868>]
Featureblock: [<Element div at 0x2ce58b8>]

我该如何做到这一点?

xpath返回匹配元素的列表。你只是在打印这份清单。

如果您想要第一个元素,则需要blockone[0]。如果你想要所有的元素,你必须循环它们(例如,理解(。

同时,你想为每个元素打印什么?直接的内部文本?根在该元素上的整个子树的HTML?还有别的吗?无论您想要什么,都需要在Element类型上使用适当的方法来获得它;lxml不能读懂你的心思,弄清楚你想要什么,我们也不能。

听起来你真正想要的只是树中更深层次的一些元素。你可以用xpath去那里。(我不会像你那样一个接一个地浏览所有元素并依赖索引,我只想写一种最简单的方法来达到我认为你想要的目的。(

genres = [a.text for a in blockone[0].xpath('.//a')]

或者,真的,为什么一开始就得到blockone?为什么不直接将xpath添加到您最初想要的元素中呢?

gtags = tree.xpath(".//*[@id='main_content']/div[4]/div[3]/div[2]/div/div[1]//a")
genres = [a.text for a in gtags]

此外,如果你使用标签中的信息,而不是通过显式遍历结构来找到它们,你可以让这变得更简单,也更健壮:

gtags = tree.xpath(".//div[@class='glance_tags popular_tags']//a")

或者,由于任何地方似乎都没有任何其他app_tag项目,只有:

gtags = tree.xpath(".//a[@class='app_tag']")

最新更新