我想从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']")