【问题标题】:Remove specific items Python Beautiful Soup删除特定项目 Python Beautiful Soup
【发布时间】:2014-05-02 20:36:18
【问题描述】:

如何使用 python 和美丽的汤将其剥离并留下其余部分,td 中的其他项目需要保留

<td style="background:#aaccff" width="50"></td>
<td align="left" style="background:#aaccff" width="150">Device Type</td>
<td align="left" style="background:#aaccff" width="115">IP Address</td>
<td align="left" style="background:#aaccff" width="100">Device Name</td>
<td align="left" style="background:#aaccff" width="215">Notes</td>
<td width="50"></td>

这是完整的代码

<td style="background:#aaccff" width="50"></td>
<td align="left" style="background:#aaccff" width="150">Device Type</td>
<td align="left" style="background:#aaccff" width="115">IP Address</td>
<td align="left" style="background:#aaccff" width="100">Device Name</td>
<td align="left" style="background:#aaccff" width="215">Notes</td>
<td width="50"></td>
<td align="left" width="150">AudioCodes Gateway</td>
<td align="left" width="115">172.31.31.2</td>
<td align="left" width="100"></td>
<td align="left" width="215">FXO</td>
<td style="background:#aaccff" width="50"></td>
<td align="left" style="background:#aaccff" width="150">Device Type</td>
<td align="left" style="background:#aaccff" width="115">IP Address</td>
<td align="left" style="background:#aaccff" width="100">Device Name</td>
<td align="left" style="background:#aaccff" width="215">Notes</td>
<td width="50"></td>
<td align="left" width="150">IC Server</td>
<td align="left" width="115">172.31.56.151</td>
<td align="left" width="100">IND056GIC151</td>
<td align="left" width="215">NAT'd IP = PENDING MPLS, Voice IP = 172.31.52.151</td>
<td width="50"></td>
<td align="left" width="150">IC Server</td>
<td align="left" width="115">172.31.56.152</td>
<td align="left" width="100">IND056GIC152</td>
<td align="left" width="215">NAT'd IP = PENDING MPLS, Voice IP = 172.31.52.152</td>
<td width="50"></td>
<td align="left" width="150">Media Server</td>
<td align="left" width="115">IND1106HMS07</td>
<td align="left" width="100">IND1106HMS07</td>
<td align="left" width="215"></td>
<td width="50"></td>
<td align="left" width="150">Media Server</td>
<td align="left" width="115">IND1106HMS07</td>
<td align="left" width="100">IND1106HMS07</td>
<td align="left" width="215"></td>

这是我目前所拥有的代码

from ntlm import HTTPNtlmAuthHandler
from bs4 import BeautifulSoup
import requests, os, bleach, urllib2, cookielib

os.system('clear')
user = 'user'
password = "pass"
url = "url"

cookies = cookielib.CookieJar()
passman = urllib2.HTTPPasswordMgrWithDefaultRealm()
passman.add_password(None, url, user, password)
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookies),HTTPNtlmAuthHandler.HTTPNtlmAuthHandler(passman))

pagedata=opener.open(url)
soup=BeautifulSoup(pagedata)

def myfunction(b):
table = b.find('ul', {'class': 'dfwp-column dfwp-list'})

for a in table.findAll('a'):
    [a.decompose() for a in table("a")]
for tr in table.findAll('tr'):
    for td in tr.findAll('td'):

        print td

myfunction(soup)

这是当前的输出

设备类型 IP地址 设备名称 备注

奥科网关 172.31.31.2

FXO

设备类型 IP地址 设备名称 备注

IC 服务器 172.31.56.151 IND056GIC151 NAT'd IP = PENDING MPLS,语音 IP = 172.31.52.151

IC 服务器 172.31.56.152 IND056GIC152 NAT'd IP = PENDING MPLS,语音 IP = 172.31.52.152

媒体服务器 IND1106HMS07 IND1106HMS07

媒体服务器 IND1106HMS07 IND1106HMS07

【问题讨论】:

  • “删除”是什么意思?
  • 去掉它们,这样它们就不会显示在最终输出中
  • 我不清楚为什么选择要删除的标签与要保留的标签。
  • 到目前为止你的代码做了什么
  • 想要删除设备类型 IP 地址设备名称注释和多余的空格

标签: python beautifulsoup


【解决方案1】:

通常,当人们询问如何使用bs4“删除”某些内容时,他们实际上只是在问如何不将其包含在find 操作中。

您想排除多余的空格(即带有tag.text == '' 的标签)和这四个“列标题”标签。您可以通过 CSS 选择器执行后者,但前者需要显式过滤。所以同时做这两件事最简单,而且在我看来更具声明性:

soup = BeautifulSoup(that_long_html_you_gave)

blacklist = {'Device Type','IP Address','Device Name','Notes'}

table = soup.body # to match your variable name.  I think.

table.find_all(lambda tag: tag.text and tag.text not in blacklist)
Out[45]: 
[<td align="left" width="150">AudioCodes Gateway</td>,
 <td align="left" width="115">172.31.31.2</td>,
 <td align="left" width="215">FXO</td>,
 <td align="left" width="150">IC Server</td>,
 <td align="left" width="115">172.31.56.151</td>,
 <td align="left" width="100">IND056GIC151</td>,
 <td align="left" width="215">NAT'd IP = PENDING MPLS, Voice IP = 172.31.52.151</td>,
 <td align="left" width="150">IC Server</td>,
 <td align="left" width="115">172.31.56.152</td>,
 <td align="left" width="100">IND056GIC152</td>,
 <td align="left" width="215">NAT'd IP = PENDING MPLS, Voice IP = 172.31.52.152</td>,
 <td align="left" width="150">Media Server</td>,
 <td align="left" width="115">IND1106HMS07</td>,
 <td align="left" width="100">IND1106HMS07</td>,
 <td align="left" width="150">Media Server</td>,
 <td align="left" width="115">IND1106HMS07</td>,
 <td align="left" width="100">IND1106HMS07</td>]

【讨论】:

    猜你喜欢
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 2019-11-23
    • 1970-01-01
    • 1970-01-01
    • 2015-08-24
    • 2015-08-28
    • 1970-01-01
    相关资源
    最近更新 更多