我有一个Basic Html文件,其中包含标签内的文本,如下所示:
<head>
<title></title>
</head>
<body>
<div>{#One#}</div>
<span>{#Two#}</span>
<b>{#Three#}</b>
<i>four</i>
<td>{#five#}</td>
<sup>{#six#}</sup>
<sub>{#seven#}</sub>
<i>eight</i>
</body>
使用Python我想解析这个文件并检查一个特殊的字符(例如。&#39; {&#39;)如果这个字符不存在则返回该行和它不是的数字当下。所以我为它写了一个小片段。
from bs4 import BeautifulSoup
import re
import urllib2
url = "testhtml.html"
page = open(url)
soup = BeautifulSoup(page.read())
bdy = soup.find('body')
for lines in bdy:
for num,line in enumerate(lines,1):
if "{" not in word:
print num,lines
然而,当我运行程序时,我得到一个奇怪的输出:如下所示:
1
1
1
1
1
1<i>four</i>
1
1
1
1<i>eight</i>
而不是:
4<i>four</i>
8<i>eight</i>
我在这里做错了什么,这似乎是一个愚蠢的错误。
答案 0 :(得分:0)
使用find('body')
会将整个body
标记及其所有内容作为单个元素返回。因此,迭代bdy
并没有给出您的想法。
您需要使用bdy.find_all(True)
,这将返回body
内的所有标记。然后,将if
语句更改为if '{' not in tag.text:
。
soup = BeautifulSoup(html, 'lxml')
bdy = soup.find('body')
for i, tag in enumerate(bdy.find_all(True), 1):
if '{' not in tag.text:
print(i, tag)
输出:
4 <i>four</i>
8 <i>eight</i>
答案 1 :(得分:-1)
from bs4 import BeautifulSoup
import re
import urllib2
url = "index.html"
page = open(url)
soup = BeautifulSoup(page.read(), "html.parser")
soup.prettify()
bdy = soup.find('body')
for num, lines in enumerate(bdy):
for line in lines:
if line !='\n' and '{' not in line:
print num, lines