如何用Python从HTML文件中移除除了选定标签以外的所有内容?

0 投票
3 回答
513 浏览
提问于 2025-04-17 23:53

如果我有这样一个标签:

<div class="wikicontent" id="wikicontentid">

我怎么用Python来打印这个标签及其里面的内容呢?

3 个回答

0

要下载网页的源代码,可以使用这个链接:http://docs.python-requests.org/en/latest/。如果你想解析网页中的html或css标签,可以参考这个链接:http://lxml.de/

import requests
import lxml.html

dom = lxml.html.fromstring(requests.get('http://theurlyourscraping.com').content)
wikicontent = [x for x in dom.xpath('//div[@class="wikicontent"]/text()')]
print wikicontent
1

使用Beautiful Soup模块。

>>> import bs4

假设我们有一个文档,里面有很多

标签,有些符合特定的类名,有些符合特定的id,还有一个同时符合这两者:

>>> html = '<div class="wikicontent">blah1</div><div class="wikicontent" id="wikicontentid">blah2</div><div id="wikicontentid">blah3</div>'

我们可以用Beautiful Soup来解析这些内容:

>>> soup = bs4.BeautifulSoup(html)

要找到所有的

标签:

>>> soup.find_all('div')
[<div class="wikicontent">blah1</div>, <div class="wikicontent" id="wikicontentid">blah2</div>, <div id="wikicontentid">blah3</div>]

这会得到一个bs4.element.ResultSet,里面包含三个bs4.element.Tag,你可以通过[]操作符来提取它们。

要找到所有符合某个id的内容,可以使用id这个参数:

>>> soup.find_all(id='wikicontentid')
[<div class="wikicontent" id="wikicontentid">blah2</div>, <div id="wikicontentid">blah3</div>]

要匹配一个类名,可以使用class_这个参数(注意有个下划线):

>>> soup.find_all(class_='wikicontent')
[<div class="wikicontent">blah1</div>, <div class="wikicontent" id="wikicontentid">blah2</div>]

你可以在一次调用中组合这些选择器:

>>> soup.find_all('div', class_='wikicontent', id='wikicontentid')
[<div class="wikicontent" id="wikicontentid">blah2</div>]

如果你知道只有一个匹配项,或者你只对第一个匹配项感兴趣,可以使用soup.find

>>> soup.find(class_='wikicontent', id='wikicontentid')
<div class="wikicontent" id="wikicontentid">blah2</div>

和之前一样,这不是一个字符串,

>>> type(soup.find('div', class_='wikicontent', id='wikicontentid'))
<class 'bs4.element.Tag'>

但你可以把它转换成字符串:

>>> str(soup.find('div', class_='wikicontent', id='wikicontentid'))
'<div class="wikicontent" id="wikicontentid">blah2</div>'
1

你可以使用BeautifulSoup这个工具:

import bs4

soup =  bs4BeautifulSoup(html_content);
result = soup.find("div", { "class" : "wikicontent", "id" : "wikicontentid" })

撰写回答