2016-03-07 181 views
0

我已经写下了一段代码,以从html文件中提取一些文本。此代码从网页中提取所需的行,现在我要提取序列数据。不幸的是,我无法提取文本,它显示出一些错误。从html文件中提取文本python

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

# Proxy information were removed 
# from these two lines 

proxyOpener = urllib2.build_opener(proxyHandler) 
urllib2.install_opener(proxyOpener) 

response = urllib2.urlopen('http://tuberculist.epfl.ch/quicksearch.php?gene+name=Rv0470c') 

################## BS Block ################################ 

soup = BeautifulSoup(response) 
text = soup.get_text() 
print text 

########################################################## 

html = response.readline() 

for l in html: 
    if "|Rv0470c|" in l: 
     print l  # code is running successfully till here 

raw = nltk.clean_html(html) 
print raw 

如何成功运行此代码?我已经检查了所有可用的线程和解决方案,但没有任何工作。

我想提取这一部分:

M. tuberculosis H37Rv|Rv0470c|pcaA 
MSVQLTPHFGNVQAHYDLSDDFFRLFLDPTQTYSCAYFERDDMTLQEAQIAKIDLALGKLNLEPGMTLLDIGCGWGATMRRAIEKYDVNVVGLTLSENQAGHVQKMFDQMDTPRSRRVLLEGWEKFDEPVDRIVSIGAFEHFGHQRYHHFFEVTHRTLPADGKMLLHTIVRPTFKEGREKGLTLTHELVHFTKFILAEIFPGGWLPSIPTVHEYAEKVGFRVTAVQSLQLHYARTLDMWATALEANKDQAIAIQSQTVYDRYMKYLTGCAKLFRQGYTDVDQFTLEK 
+0

什么是错误? – mvelay

+0

这是错误“NotImplementedError:要删除HTML标记,请使用BeautifulSoup的get_text()函数” 然后我尝试使用BeutifulSoup,但其返回的文本作为数百万单个字符,而不是正确的文本 – jax

+0

请[编辑]您的问题,并告诉我们你对BS的使用。 – 2016-03-07 09:11:57

回答

0

我能够写下这个代码后,提取所需的文字:没有任何依赖关系接受“的urllib2”和我的情况下,它就像一个魅力哪些工作。

import urllib2 

httpProxy = {'username': '------', '-----': '-------', 'host': '------', 'port': '-----'} 
proxyHandler = urllib2.ProxyHandler({'http': 'http://'+httpProxy['username']+':'+httpProxy['password']+'@'+httpProxy['host']+':'+httpProxy['port']}) 
proxyOpener = urllib2.build_opener(proxyHandler) 
urllib2.install_opener(proxyOpener) 



response = urllib2.urlopen('http://tuberculist.epfl.ch/quicksearch.php?gene+name=Rv0470c') 

html = response.readlines() 

f = open("/home/zebrafish/Desktop/output.txt",'w') 


for l in html: 
    if "|Rv0470c|" in l: 
     l = l.split("</small>")[0].split("<TR><TD><small style=font-family:courier>")[1] 
     l = l.split("<br />") 
     ttl = l[:1] 
     seq = "".join(l[1:]) 
     f.write("".join(ttl)) 
     f.write(seq) 
f.close() 
0

我不太肯定正是您所要求作为一个整体,但这里是我的临时采取对您的问题(类似于你其实)这确实检索您请求的HTML的一部分。也许你可以得到一些想法。 (针对Python2进行调整)

import requests 
from bs4 import BeautifulSoup 

url = 'http://tuberculist.epfl.ch/quicksearch.php?gene+name=Rv0470c' 
r = requests.get(url) 
html = r.content 
soup = BeautifulSoup(html, "lxml") 
for n in soup.find_all('tr'): 
    if "|Rv0470c|" in n.text: 
     nt = n.text 
     while '\n' in nt: 
      nt.replace('\n','\t') 
     nt=nt.split('\t') 
     nt = [x for x in nt if "|Rv0470c|" in x][0].strip() 
     print (nt.lstrip('>'))