在包含空格的类中使用Beautiful Soup

时间:2018-02-27 22:43:38

标签: python web-scraping beautifulsoup

我使用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

2 个答案:

答案 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'])以获取元素。