2017-02-22 68 views
0

我有以下的HTML重复数次的网页上(请不要判断):的Python:从HTML中提取分隔文本与BeautifulSoup

<div class="container"> 
    <div class="image"> 
     <a href="#" title="#" class="#"> 
     <img src="img.jpg" alt="#" class="#"> 
     </a> 
    </div> 
    <div class="text"> 
     <a href="#"> 
      <h4 class="h4-class">{TITLE}</h4> 
     {SOME TEXT 1}<br /> 
     <h5><img src="img.jpg" alt="#" /> {SOME TEXT 2}</h5> 
     {SOME TEXT 3}  </a> 
    </div> 
    </div> 

我想提取{TITLE}{SOME TEXT 1}{SOME TEXT 2}{SOME TEXT 3}

我的代码如下:

from BeautifulSoup import BeautifulSoup as bs 
import urllib2 
html = urllib2.urlopen('text') 
soup = bs(html) 
divs = soup.findAll("div", { "class" : "text" }) 

for div in divs: 
    inner_text = div.text 
    strings = inner_text.split("\n") 
    print strings[0] ## I want this to print just {TITLE} 

上打印出来,它打印一条线连接所有的t他认为例如

{TITLE}{SOME TEXT 1}{SOME TEXT 2}{SOME TEXT 3}

反正是有解决这个?我错过了什么?

+0

我不认为在给定的HTML代码的任何'list_txt'。 – arsho

+0

在此处添加它时发生错字。问题依然存在。 – pee2pee

回答

1

您可以prettifysee documentation here)div内容,然后根据需要操作每一行。如果类名为text的div具有相同的结构,这将起作用。

代码(Python的2):

from BeautifulSoup import BeautifulSoup as bs 

html = ''' 
<div class="container"> 
    <div class="image"> 
     <a href="#" title="#" class="#"> 
     <img src="img.jpg" alt="#" class="#"> 
     </a> 
    </div> 
    <div class="text"> 
     <a href="#"> 
      <h4 class="h4-class">{TITLE}</h4> 
     {SOME TEXT 1}<br /> 
     <h5><img src="img.jpg" alt="#" /> {SOME TEXT 2}</h5> 
     {SOME TEXT 3}  </a> 
    </div> 
    </div> 
''' 
soup = bs(html) 
divs = soup.findAll("div",{"class":"text"}) 
for div in divs: 
    pretty_div = div.prettify() 
    content_list = pretty_div.split("\n") 
    content_list = [s.strip() for s in content_list] 
    print content_list[3] 
    print content_list[5] 
    print content_list[9] 
    print content_list[11] 

输出:

{TITLE} 
{SOME TEXT 1} 
{SOME TEXT 2} 
{SOME TEXT 3} 
+0

假设我想提取HREF,在这种情况下我该如何解决? – pee2pee

+0

您是否想仅提取'text'类的div内链接的'href'属性值? – arsho

+0

是的......除了你已经捕获的东西之外 – pee2pee