python - Python 前标签之间的解析

标签 python html parsing beautifulsoup pre

我正在尝试使用此代码使用 Python 来解析 PRE 标签

s = br.open(base_url+str(string))
u = br.geturl()
seq = br.open(u)
blat = BeautifulSoup(seq)    
for res in blat.find('pre').findChildren():
        seq = res.string
        print seq

来自以下 HTML 源代码:

<PRE><TT>
<span style='color:#22CCEE;'>T</span><span style='color:#3300FF;'>AAAAGATGA</span> <span style='color:#3300FF;'>AGTTTCTATC</span> <span style='color:#3300FF;'>ATCCAAA</span>aa<span style='color:#3300FF;'>A</span> <span style='color:#3300FF;'>TGGGCTACAG</span> <span style='color:#3300FF;'>AAAC</span><span style='color:#22CCEE;'>C</span></TT></PRE>
<HR ALIGN="CENTER"><H4><A NAME=genomic></A>Genomic chr17 (reverse strand):</H4>
<PRE><TT>
tacatttttc tctaactgca aacataatgt tttcccttgt attttacaga  41256278
tgcaaacagc tataattttg caaaaaagga aaataactct cctgaacatc  41256228
<A NAME=1></A><span style='color:#22CCEE;'>T</span><span style='color:#3300FF;'>AAAAGATGA</span> <span style='color:#3300FF;'>AGTTTCTATC</span> <span style='color:#3300FF;'>ATCCAAA</span>gt<span style='color:#3300FF;'>A</span> <span style='color:#3300FF;'>TGGGCTACAG</span> <span style='color:#3300FF;'>AAAC</span><span style='color:#22CCEE;'>C</span>gtgcc  41256178
aaaagacttc tacagagtga acccgaaaat ccttccttgg taaaaccatt  41256128
tgttttcttc ttcttcttct tcttcttttc tttttttttt ctttt</TT></PRE>
<HR ALIGN="CENTER"><H4><A NAME=ali></A>Side by Side Alignment</H4>
<PRE><TT>
00000001 taaaagatgaagtttctatcatccaaaaaatgggctacagaaacc 00000045
<<<<<<<< |||||||||||||||||||||||||||  |||||||||||||||| <<<<<<<<
41256227 taaaagatgaagtttctatcatccaaagtatgggctacagaaacc 41256183

</TT></PRE>

当我想解析最后一个 PRE 标签元素时,它给了我第一个 PRE 标签元素。我将不胜感激任何实现这一目标的建议。 我希望输出如下:

00000001 taaaagatgaagtttctatcatccaaaaaatgggctacagaaacc 00000045
<<<<<<<< |||||||||||||||||||||||||||  |||||||||||||||| <<<<<<<<
41256227 taaaagatgaagtttctatcatccaaagtatgggctacagaaacc 41256183

而我当前的输出是

T
AAAAGATGA
AGTTTCTATC
ATCCAAA
A
TGGGCTACAG
AAAC
C

最佳答案

您可以使用find_all()得到最后的结果:

from bs4 import BeautifulSoup

soup = BeautifulSoup(open('../index.html'), 'html5lib')

pre = soup.find_all('pre')[-1]
print pre.text.strip()

其中 index.html 包含您提供的 html。

它打印:

00000001 taaaagatgaagtttctatcatccaaaaaatgggctacagaaacc 00000045
<<<<<<<< ||||||||||||||||||||||||||| |||||||||||||||| <<<<<<<<
41256227 taaaagatgaagtttctatcatccaaagtatgggctacagaaacc 41256183
<小时/>

另一种选择是依赖之前的 h4 标签来获取适当的 pre:

h4 = soup.select('h4 > a[name="ali"]')[0].parent
print h4.find_next_sibling('pre').text.strip()

关于python - Python 前标签之间的解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25003802/

相关文章:

parsing - 为什么解析器组合器 "seq"是用 "bind"和 "return"定义的?

java - 确定细胞分离器

python - 在 Databricks 中将变量从 Scala 传递到 Python

python - 通过仅选择特定列来减去两个数据框

html - 如何使用表格单元格在另一个顶部制作 div?

javascript - jQuery : Set a selected option only if there is no selected option

python - Pandas 从日期和整数创建日期时间列

python - 如何在自定义 Django 命令中抽象出命令代码

javascript - 打印带有分页符的 html 页面

ios - 如何在 iOS 上读取或解析 .mobi 文件