通过其中的元素文本找到div类

时间:2019-05-21 03:45:50

标签: python web-scraping beautifulsoup

我正在爬网游戏网站,并且我想要获取包含特定文本的div对象。 在这种情况下,我想获取包含文本为“ SANDBOX Ghost”的href的div类“ GameItemWrap”。 整个代码中有很多GameItemWrap类,我不想获得“ SummonerName”类div,因为在“ GameItemWrap”中还需要其他一些类。

这是我尝试过的:

duo_name='SANDBOX Ghost'    
gamelist=soup.find('div',"GameItemList")# "GameItemList" is a div that contains "GameItemWrap"
games=gamelist.find_all('GameItemWrap',{('a'):duo_name })

这就是我正在爬行的javascript的样子:

<div class="GameItemWrap>
    #some other div classes that i will need in the future 
    <div class="SummonerName">                                                       
        <a href="//www.op.gg/summoner/userName=SANDBOX+Ghost" class="Link" target="_blank">SANDBOX Ghost</a>                                                 
    </div>
</div>

我希望有4个包含文字“ SANDBOX Ghost”的GameItemWraps 但是当我打印

print(len(games)) 

输出为0。这不起作用。 我也不想检查每个GameItemWraps类,以检查它们是否包含“ SANDBOX Ghost” 这可能吗?

2 个答案:

答案 0 :(得分:0)

修复显示的html后,使用bs4 4.7.1,我希望您能够使用:contains伪类

from bs4 import BeautifulSoup as bs

html ='''
<div class="GameItemWrap">
    #some other div classes that i will need in the future 
    <div class="SummonerName">                                                       
        <a href="//www.op.gg/summoner/userName=SANDBOX+Ghost" class="Link" target="_blank">SANDBOX Ghost</a>                                                 
    </div>
</div>
'''
duo_name = 'SANDBOX Ghost'
soup = bs(html, 'lxml') #'html.parser' if lxml not installed
items = soup.select('.GameItemWrap:contains("' + duo_name + '")')

答案 1 :(得分:0)

希望您的目标数据显示在标签上,然后尝试使用如下所示的内容,这将对您有所帮助。

duo_name='SANDBOX Ghost'
games = soup.find_all('a',string=duo_name)

完整的代码如下,

from bs4 import BeautifulSoup
import re
chunk = '''<div class="GameItemWrap">
    #some other div classes that i will need in the future
    <div class="SummonerName">
        <a href="//www.op.gg/summoner/userName=SANDBOX+Ghost" class="Link" target="_blank">SANDBOX Ghost</a>
    </div>
</div>'''
soup = BeautifulSoup(chunk,'html5lib')
game_data = {}
duo_name='SANDBOX Ghost'
for chunks in soup.find_all('div',{'class':'GameItemWrap'}):
    if chunks.find('a',string=duo_name):
        chunk_for_future = chunks
        a_tag = chunks.find('a',string=duo_name)
        game_data[a_tag.text] = a_tag['href']
print(game_data)

,您的结果将(如字典所示)

{'SANDBOX Ghost': '//www.op.gg/summoner/userName=SANDBOX+Ghost'}