我正在爬网游戏网站,并且我想要获取包含特定文本的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” 这可能吗?
答案 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'}