如何解析html文件中的文本

时间:2016-10-04 07:41:31

标签: python

import urllib2
import nltk
from HTMLParser import HTMLParser
from bs4 import BeautifulSoup




l = """<TR><TD><small style=font-family:courier> >M. tuberculosis H37Rv|Rv3676|crp<br />VDEILARAGIFQGVEPSAIAALTKQLQPVDFPRGHTVFAEGEPGDRLYIIISGKVKIGRR<br />APDGRENLLTIMGPSDMFGELSIFDPGPRTSSATTITEVRAVSMDRDALRSWIADRPEIS<br />EQLLRVLARRLRRTNNNLADLIFTDVPGRVAKQLLQLAQRFGTQEGGALRVTHDLTQEEI<br />AQLVGASRETVNKALADFAHRGWIRLEGKSVLISDSERLARRAR<br /></small><TR><td><b><big>Blastp: <a href="http://tuberculist.epfl.ch/blast_output/Rv3676.fasta.out"> Pre-computed results</a></big></b><TR><td><b><big>TransMembrane prediction using Hidden Markov Models: <a href="http://tuberculist.epfl.ch/tmhmm/Rv3676.html"> TMHMM</a></big></b><base target="_blank"/><TR><td><b><big>Genomic sequence</big></b><br /><br /><form action="dnaseq.php" method="get">"""

print l

我有一个HTML行,想要提取嵌入HTML标记的文本。我尝试了所有可用的方法,但它们在我的情况下不起作用。

我该怎么做?

预期输出应为:

分枝杆菌H37Rv | Rv3676 | CRP VDEILARAGIFQGVEPSAIAALTKQLQPVDFPRGHTVFAEGEPGDRLYIIISGKVKIGRRAPDGRENLLTIMGPSDMFGELSIFDPGPRTSSATTITEVRAVSMDRDALRSWIADRPEISEQLLRVLARRLRRTNNNLADLIFTDVPGRVAKQLLQLAQRFGTQEGGALRVTHDLTQEEIAQLVGASRETVNKALADFAHRGWIRLEGKSVLISDSERLARRAR

3 个答案:

答案 0 :(得分:1)

我注意到您导入了BeautifulSoup,因此您可以使用BeautifulSoup来帮助您提取这些信息。

soup = BeautifulSoup(l,"html.parser")
print soup.get_text()

我已经尝试过它,但是最后一个标签中的句子也会被提取出来,如果需要,你必须剪掉结果。

答案 1 :(得分:1)

try: 
    from BeautifulSoup import BeautifulSoup
except ImportError:
    from bs4 import BeautifulSoup

html = BeautifulSoup(l)
small = html.find_all('small')
print (small.get_text())

这会获取小标签并打印出其中的所有文字

答案 2 :(得分:1)

我尝试使用BeautifulSoup,因为它生成了无格式版本,所以我决定用自己写下代码并且它的工作非常精细并且生成我想要的东西。

import urllib2


proxy = urllib2.ProxyHandler({'http': 'http://******************'})
opener = urllib2.build_opener(proxy)
urllib2.install_opener(opener)
res = urllib2.urlopen('http://tuberculist.epfl.ch/quicksearch.php?gene+name=Rv3676')
html = res.readlines()

for l in html:


    if "Genomic sequence" in l:
        l = l.split("</small>")[0]

        l  = l.split("<br />")
        header = l[0]
        sequence = l[1:]

        print "".join([">", header.split(">")[4]])
        print "".join(sequence)

输出

>M. tuberculosis H37Rv|Rv3676|crp


VDEILARAGIFQGVEPSAIAALTKQLQPVDFPRGHTVFAEGEPGDRLYIIISGKVKIGRRAPDGRENLLTIMGPSDMFGELSIFDPGPRTSSATTITEVRAVSMDRDALRSWIADRPEISEQLLRVLARRLRRTNNNLADLIFTDVPGRVAKQLLQLAQRFGTQEGGALRVTHDLTQEEIAQLVGASRETVNKALADFAHRGWIRLEGKSVLISDSERLARRAR