我无法理解bs4解析如何在标签层次结构中提取多个级别的信息。
以下是我尝试解析的内容示例(来自www.j-archive.com/showgame.php?game_id=50):
...
<table>
<tr>
<td>
<div onmouseover="toggle('clue_DJ_1_1', 'clue_DJ_1_1_stuck', '<em class="correct_response"><i>The Red Badge of Courage</i></em><br /><br /><table width="100%"><tr><td class="right">Kelley</td></tr></table>')" onmouseout="toggle('clue_DJ_1_1', 'clue_DJ_1_1_stuck', 'This classic by Stephen Crane is subtitled "An Episode of the American Civil War"')" onclick="togglestick('clue_DJ_1_1_stuck')">
我特别希望得到“勇敢的红色徽章”字样,以便<table>
,<tr>
,<td>
和<div>
,然后似乎是属性onmouseover
的一部分。
我可以用以下内容提取所有onmouseover
语句:
for tag in soup.findAll(onmouseover=True):
print(tag['onmouseover'])
但是我不知道在这个输出中解析内容很热。
提前致谢。
答案 0 :(得分:0)
由于您感兴趣的文本位于<em>
标记中,因此使用子字符串索引进行解析非常容易:
import requests
from bs4 import BeautifulSoup
req = requests.get('http://www.j-archive.com/showgame.php?game_id=50')
soup = BeautifulSoup(req.text, 'lxml')
for tag in soup.findAll('div',onmouseover=True):
parseText = str(tag['onmouseover'])
tag1 = '<em class="correct_response">'
tag2 = '</em>'
i1 = parseText.index(tag1)
i2 = parseText.index(tag2)
print(parseText[i1+len(tag1):i2])
此代码获得了所有条目,直到'Final Jeopardy'。