我使用Python和Beautiful Soup从Steam(http://store.steampowered.com/tags/en-us/RPG/)中删除了20个游戏列表。但这些游戏不是使用div
分隔,而是使用a
标记。因此,我尝试执行以下操作:
all_games=soup.find_all('a',{'class':'tab_item app_impression_tracked'})
(那些空格存在于Steam的HTML中)
但是,它返回了一个空列表,而不是包含'类'的所有a
标记。叫tab_item app_impression_tracked
我不是只想废除游戏的名字,而是试图降低它的价格,折扣......而且我对这个链接也不感兴趣。我只想抓取a
标签,因为它包含了我需要的有关游戏的所有信息。
有解决方案吗?
解决方案:
all_games = soup.find('div', {'id':'NewReleasesRows'}).find_all('a', {'class':'tab_item'})
这些空格有问题,我认为该课程的真实姓名为tab_item
而不是tab_item app_impression_tracked
。
答案 0 :(得分:0)
您也可以使用soup.select()
方法中的css-rules找到所需的项目。
下一个代码从页面中选择20个项目:
all_games = soup.select("a.tab_item[class*='app_impression_tracked']")
当标记属性class
中的类由空格分隔时,您可以通过以下方式匹配它们:"a.tab_item.app_impression_tracked"
。但是这个规则与这两个类完全匹配a
而内部没有其他类。看起来列表中的20个项目几乎没有classes
。
括号中的*=
表示contains next string
。
答案 1 :(得分:0)
我也遇到了同样的问题,并设法通过
进行了修复className = 'tab_item app_impression_tracked'
all_games = soup.find_all('a', {'class': className.split() if ' ' in className else className})
因此,如果类名中有两个以上的空格,我们将className拆分(按空格分隔,因此className
变成['tab_item', 'app_impression_tracked']
)以获取元素。