[Python]从Steam获取XPath值并打印它

[Python]从Steam获取XPath值并打印它,python,xpath,lxml,python-requests,Python,Xpath,Lxml,Python Requests,我想从Steamstoresite获取XPATH值,例如。右边是两个盒子。第一个包含标题、流派、开发者。。。我只需要这里的类型。每场比赛都有不同的结果。有些有4种类型,有些只有一种。然后还有另一个区块,在那里,游戏的特点是列表,如单人,多人,合作社,游戏板 我需要所有这些价值观。 有时,PEGI/USK之间也会出现图像 . 这是我目前掌握的代码。当我尝试时,它只打印: Detailblock: [<Element div at 0x2ce5868>] Featureblock: [

我想从Steamstoresite获取XPATH值,例如。右边是两个盒子。第一个包含标题、流派、开发者。。。我只需要这里的类型。每场比赛都有不同的结果。有些有4种类型,有些只有一种。然后还有另一个区块,在那里,游戏的特点是列表,如单人,多人,合作社,游戏板

我需要所有这些价值观。 有时,PEGI/USK之间也会出现图像 .

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

Detailblock: [<Element div at 0x2ce5868>]
Featureblock: [<Element div at 0x2ce58b8>]
如何实现这一点?

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

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

同时,您希望为每个元素打印什么?直接内部文本?以该元素为根的整个子树的HTML?还有别的吗?无论您想要什么,您都需要对类型使用适当的方法来获得它;lxml无法读懂您的想法并了解您想要什么,我们也无法

听起来你真正想要的只是树中更深的一些元素。你可以自己去那里。我不再像你那样一个接一个地检查所有的元素并依赖索引,我只想写一个最简单的方法来达到你想要的

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")
或者,由于似乎没有任何其他应用程序标签项目,只需:

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

我尝试使用blockone[0]。文本,但它只打印了一些换行符。我想要的第一块,标签后的纯文本格式的流派立场和第二块纯文本格式的功能,没有图标。我该如何实现呢?如果您想要这些子元素,为什么不再次使用xpath呢?例如,您希望div下的每个元素的文本都带有类glance_标记,该标记是blockone[0]的后代。为什么要获取blockone[0]的全部文本并尝试对其进行解析,而不是迭代a元素并获取它们的文本?作为旁注,所有这些div都有不同的类,并且布局在几个月前刚刚更改…您确定要通过索引获取它们吗?另外,steam难道没有API可以用来代替屏幕抓取吗?你是对的。。。但它不在官方API文档中。。。我在TF2 Wiki上找到它,位于。。。所以我需要的url是例如store.steampowered.com/api/appdetails/?appids=234160&filters=genres,categories&l=english现在我需要了解如何使用JSON。。。但我想我能做到…酷,听起来应该更容易,更健壮。
gtags = tree.xpath(".//a[@class='app_tag']")