如何将文本和图像拼凑在一起?

时间:2013-08-26 19:00:56

标签: python-2.7 web-scraping beautifulsoup

我正在使用beautifulSoup4处理网页抓取工具。我想获得文章的文字和图片,但有一些问题! HTML代码是这样的:

<div>
 some texts1
 <br />
 <img src="imgpic.jpg" />
 <br />
 some texts2
</div>

我得到了全文:

post_soup.get_text()

并照常将div中的所有图片与urllib2一起保存 最后我将它们保存在一个html页面中,并将所有文本放在顶部,最后将图像放在顶部,但我想将它们保存在新的html页面中,就像我抓取它们的页面一样,我的意思是先some texts1然后{{1}然后image

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

这不是最好和最正确的方法,但应该有效:

from bs4 import BeautifulSoup

html = "<div>\
 some texts1\
 <br />\
 <img src=\"imgpic.jpg\" />\
 <br />\
 some texts2\
</div>"

soup = BeautifulSoup(html)
text = "+".join(soup.stripped_strings).split("+")

print text[0]
print soup.find("img")['src']
print text[1]

输出:

some texts1
imgpic.jpg
some texts2

答案 1 :(得分:0)

我不是使用get_text(),而是使用prettify()将整个<div>部分作为字符串返回。这样,您始终可以保证在顶部和底部都有正确的文本。从那里你可以去除部分字符串以获得你想要的东西:

# post_soup is the <div> element you posted
s = post_soup.prettify()
split_s = s.split('<br/>')
top = split_s[0].strip('<div>')
bottom = split_s[-1].strip('</div>')

输出:

>>> top
u'\n some texts1\n '
>>> bottom
u'\n some texts2\n'