使用.findAll()方法时,Beautifulsoup正在计算太多标签

时间:2018-06-17 19:31:32

标签: python html web-scraping beautifulsoup

我正在为webscraping编写代码,似乎beautifulsoup中的.findAll()函数只找到其类属性包含指定类名的标记。

例如,如果我写container = page_soup.findAll('div',{'class':'compare-collapse'})container将包含div标签,其类不仅是'compare-collapse',还包括'compare-collapse compare-collapse_collapsed'。我只想找到其类属性仅 'compare-collapse'的div标签。我之前使用过Beautifulsoup,但我没有遇到过这个问题。

这是我的代码。我用很多容器编写了代码,以便于调试。这个bug发生在container3。

html = driver.page_source
page_soup = soup(html,"html.parser")

container1=page_soup

container2=container1.findAll('div',{'id':'ratings'})
container2=container2[0]

container3=container2.findAll('div',{'class':'compare-collapse'}) #BUG HAPPENS HERE
container3=container3[1]

container4=container3.findAll('div',{'class':'compare-collapse_items'})
container4=container4[0]

container5=container4.findAll('div',{'class':'compare-section'})
container5=container5[0]

container6=container5.findAll('div',{'class':'container-fluid compare-row'})
container6=container6[2]

container7=container6.findAll('div',{'class':'row'})
container7=container7[0]

name=container7.div.div.text
print(name)

我以前将所有容器存储在文本文档中。 container3的课程为compare-collapse compare-collapse_collapsed,而不是compare-collapse。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

重复: BeautifulSoup webscraping find_all( ): finding exact match

请参阅上述问题。

基于你的,它将是:

container = page_soup.findAll(lambda tag: tag.name == 'div' and 
                               tag.get('class') == ['compare-collapse'])