如何在Python中获取HTML页面内容

4 投票
6 回答
13193 浏览
提问于 2025-04-15 20:14

我下载了一个网页,并把它保存成了一个html文件。我想知道,最简单的方法是什么,能让我获取到这个页面的内容。这里的内容指的是浏览器会显示的文字。

为了更清楚:

输入:

<html><head><title>Page title</title></head>
       <body><p id="firstpara" align="center">This is paragraph <b>one</b>.
       <p id="secondpara" align="blah">This is paragraph <b>two</b>.
       </html>

输出:

Page title This is paragraph one. This is paragraph two.

整理一下:

from BeautifulSoup import BeautifulSoup
import re

def removeHtmlTags(page):
    p = re.compile(r'''<(?:"[^"]*"['"]*|'[^']*'['"]*|[^'">])+>''')
    return p.sub('', page)

def removeHtmlTags2(page):
    soup = BeautifulSoup(page)
    return ''.join(soup.findAll(text=True))

相关链接

6 个回答

2

你可以看看这个链接:从HTML文档中提取数据 - 深入Python,因为这里的内容(几乎)正好符合你的需求。

9

我个人喜欢用lxml,因为它就像瑞士军刀一样多功能...

from lxml import html

print html.parse('http://someurl.at.domain').xpath('//body')[0].text_content()

这段代码告诉lxml去获取网页,找到标签,然后提取并打印出所有的文本。

我经常需要解析网页,而用正则表达式通常不是个好办法,除非你只需要用一次。如果网页的作者改了他们的HTML结构,你的正则表达式很可能就会失效。而用解析器就更可靠,通常能继续正常工作。

用解析器的一个大问题是,你需要学习怎么找到你想要的文档部分,但在浏览器里有很多XPATH工具可以帮助你简化这个过程。

12

使用Beautiful Soup来解析HTML。

如果你想获取所有的文本内容,而不包含任何标签,可以试试以下代码:

''.join(soup.findAll(text=True))

撰写回答