我是Python的新手,我目前正致力于解决问题,以提高我的编码技能。我已经使用python提交了一个表单,并且在提交表单后显示的下一页中,我想收集一些数据并将其显示在我的输出中。我想要收集的所需数据位于<TR> </TR>
个标记之间,并且该页面中有很多<TR> </TR>
。
供您参考:
<TR class="even"><TD class="id">6422275</TD><TD class="date"><NOBR>09:06:49</NOBR><BR><NOBR>27 Feb 2016</NOBR></TD><TD class="coder"><A HREF="author.aspx?id=201837">THE_ROCK</A></TD><TD class="problem"><A HREF="problem.aspx?space=1&num=1000">1000<SPAN CLASS="problemname">. A+B Problem</SPAN></A></TD><TD class="language">Python 2.7</TD><TD class="verdict_ac">Accepted</TD><TD class="test"><BR></TD><TD class="runtime">0.015</TD><TD class="memory">160 KB</TD></TR>
因此,在整个HTML页面中,我想要读取名称THE_ROCK
(它出现在上面的给定标记中),如果该页面中存在该名称,我想要打印完整的特定<TR> </TR>
标记中的元素(如problem,problemname,verdict_ac,runtime和memory)。我知道我可以使用BeautifulSoup
,但我不知道如何比较内容并打印具体需要的元素/标签。
代码:
res = br.submit()
final_url = res.geturl()
html_doc = br.open(final_url)
html_read = (html_doc.read())
soup = BeautifulSoup(data, convertEntities=BeautifulSoup.HTML_ENTITIES)
for row in soup.find_all('TR'):
print '\n'.join(row.stripped_strings)
我试图找到TR
标签,但没有帮助,也没有打印输出。有人能告诉我我在哪里做错了。我的方法是错误的还是流程错了?你能否告诉我为什么我无法按预期获得输出。提前致谢。任何帮助将不胜感激。
答案 0 :(得分:2)
按文字查找元素,并使用find_parent()
找到tr
父级:
tr = soup.find(text="THE_ROCK").find_parent("tr")
答案 1 :(得分:1)
也许这会有所帮助:
soup = BeautifulSoup(devs_html, 'html.parser')
row = soup.find_all('tr', class_='even')
In [195]: row
Out[195]: [<tr class="even"><td class="id">6422275</td><td class="date"><nobr>09:06:49</nobr><br><nobr>27 Feb 2016</nobr></br></td><td class="coder"><a href="author.aspx?id=201837">THE_ROCK</a></td><td class="problem"><a href="problem.aspx?space=1&num=1000">1000<span class="problemname">. A+B Problem</span></a></td><td class="language">Python 2.7</td><td class="verdict_ac">Accepted</td><td class="test"><br/></td><td class="runtime">0.015</td><td class="memory">160 KB</td></tr>]
In [196]: row[0].contents
Out[196]:
[<td class="id">6422275</td>,
<td class="date"><nobr>09:06:49</nobr><br><nobr>27 Feb 2016</nobr></br></td>,
<td class="coder"><a href="author.aspx?id=201837">THE_ROCK</a></td>,
<td class="problem"><a href="problem.aspx?space=1&num=1000">1000<span class="problemname">. A+B Problem</span></a></td>,
<td class="language">Python 2.7</td>,
<td class="verdict_ac">Accepted</td>,
<td class="test"><br/></td>,
<td class="runtime">0.015</td>,
<td class="memory">160 KB</td>]
好的,基本上我们只是通过行类(:table row)搜索行。这应该为您提供可以迭代的行列表。
只需要一行,行[0],作为一个例子,你可以看到你拥有行中包含的所有数据()。要从中获取信息,您可以执行以下操作:
In [197]: row[0].find(class_='id').text
Out[197]: u'6422275'
In [198]: row[0].find(class_='coder').text
Out[198]: u'THE_ROCK'
依此类推,直到你掌握了所有你需要的信息。
编辑:好的,如果您只想找到THE_ROCK并打印行:
for r in row:
if 'THE_ROCK' in r.find(class_='coder').text:
print(r)
这应该会给你整行,你可以做任何你喜欢的事情。