Example html file is like:
<tr><td><a href="gigi/gigi001.jpg" target="_BLANK">gigi001.jpg</a> <a href="gigi/gigi003.jpg" target="_BLANK">gigi003.jpg</a> <a href="gigi/gigi004.jpg" target="_BLANK">gigi004.jpg</a> <a href="gigi/gigi007.jpg" target="_BLANK">gigi007.jpg</a></td><td>138K</td><td>梁咏琪。</td></tr> <tr><td><a href="mhpeople/0018.jpg" target="_BLANK">0018.jpg</a> <a href="mhpeople/1708.jpg" target="_BLANK">1708.jpg</a></td><td>153K</td><td>漫画人物(2张)。</td></tr> <tr><td><a href="youban/norika001.jpg" target="_BLANK">norika001.jpg</a> <a href="youban/norika002.jpg" target="_BLANK">norika002.jpg</a> <a href="youban/norika003.jpg" target="_BLANK">norika003.jpg</a></td><td>269K</td><td>和深田恭子一样的日本明星友板理惠,比较pretty。</td></tr> <tr><td><a href="stgz/kyoko004.jpg" target="_BLANK">kyoko004.jpg</a> <a href="stgz/kyoko001.jpg" target="_BLANK">kyoko001.jpg</a> <a href="stgz/kyoko002.jpg" target="_BLANK">kyoko002.jpg</a> <a href="stgz/kyoko003.jpg" target="_BLANK">kyoko003.jpg</a> <a href="stgz/kyoko.jpg" target="_BLANK">kyoko.jpg</a> <a href="stgz/1018-toheart02.jpg" target="_BLANK">1018-toheart02.jpg</a> <a href="stgz/1018-toheart04.jpg" target="_BLANK">1018-toheart04.jpg</a></td><td>762K</td><td>她,真的是很美。有些女孩的美丽,是因人而异。换言之,你认为美的,我未必赞同。但我肯定没有人会质疑这个女孩子的美丽。我没有很高的文学造诣,所以要形容一个非常美丽的女子时,就只有闭月羞花、沉鱼落雁、国色天香和倾国倾城之类的老套。只怪我是学计算机的,总希望美丽是可以公式计算或用仪器测量。但美丽毕竟只是美丽。美丽是感性,而不是理性。在一中故老相传着一句话:“自古红颜多薄命,一中女生万万岁”……如果一个女子的寿命真的跟她的美貌成反比的话,那么深田恭子一定很短命。这么美丽的女子,是不应该让我们再品头论足的。好了,别发呆,载一份回去吧。(8张) --汤浩。</td></tr>
paring program is like:
from bs4 import BeautifulSoup
with open('dl_html.txt', 'r', encoding='utf8') as f:
htmlfile = f.read()
soup = BeautifulSoup(htmlfile, 'lxml')
dl_a = soup.findAll('a')
links = ['http://www.huzheng.org/linfans/mypics/'+da.attrs['href'] for da in dl_a]
with open('links.txt', 'w') as f:
for l in links:
f.write(l+'\n')
from bs4 import BeautifulSoup
import os,sys
if len(sys.argv) == 2:
f1=sys.argv[1]
else:
print('usage: htmlPretty.py file1.htm')
sys.exit(1)
if not os.path.exists(f1):
print('Error: %s not found'%f1)
sys.exit(1)
fp=open(f1,'r')
soup=BeautifulSoup(fp,fromEncoding='utf8',features='lxml')
fp.close()
f2=f1+'l'
fp=open(f2,'w')
fp.write(soup.prettify('utf8').decode('utf8'))
fp.close(),格式化html代码[1]
#搜索tag名 <title></title>
soup.find_all("title")
#关于属性
#搜索id为"link2"的标签
soup.find_all(id='link2')
#这里属性的值可以使用字符串,正则表达式 ,列表,True
soup.find_all(id=re.compile("elsie"))
#可以指定多个条件
soup.find_all(href=re.compile("elsie"), id='link1')
#对于有些不能指定的标签(data-foo)
soup.find_all(attrs={"data-foo": "value"})
#对于class -->class为python保留字使用class_
soup.find_all(class_="top")
#属性结束
#关于string(内容)
#基础 内容为'Elsie'的
soup.find_all(string="Elsie")
#内容在数组中的
soup.find_all(string=["Tillie", "Elsie", "Lacie"])
#内容匹配正则表达式的
soup.find_all(string=re.compile("Dormouse"))
#匹配函数
soup.find_all(string=is_the_only_string_within_a_tag)
#内容结束
#搜索限制
#限制搜索数量为2
soup.find_all("a", limit=2)
#只搜索直接子节点
soup.html.find_all("a", recursive=False)
#搜索限制结束
#搜索tag为title
soup.select("title")
#通过tag标签逐层查找
soup.select("html head title")
#寻找直接子标签
soup.select("head > title")
soup.select("p > #link1")
#选择所有紧接着id为link1元素之后的class为sister的元素
soup.select("#link1 + .sister")
#选择p元素之后的每一个ul元素
soup.select("p + ul")
#同时用多种CSS选择器查询元素
soup.select("#link1,#link2")
#通过查询元素属性
soup.select('a[href="http://example.com/elsie"]')
# [<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>]
soup.select('a[href^="http://example.com/"]')
# [<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>,
# <a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>,
# <a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>]
soup.select('a[href$="tillie"]')
# [<a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>]
soup.select('a[href*=".com/el"]')
# [<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>]
#通过查询元素属性结束
#通过语言查找
soup.select('p[lang|=en]')
#查找第一个元素
soup.select_one(".sister")
find_parents() 和 find_parent()
搜索当前节点的父节点
find_next_siblings() 和 find_next_sibling()
搜索当前节点后边解析的兄弟节点
(可以理解为搜索当前标签下边的同级节点)
find_previous_siblings() 和 find_previous_sibling()
搜索当前节点前边解析的兄弟节点
(可以理解为搜索当前标签上边的同级节点)
find_all_next() 和 find_next()
对当前节点之后的节点进行迭代
find_all_previous() 和 find_previous()
对当前节点之前的节点进行迭代
archieved from bs4解析html文件记录
extensive reading: BeautifulSoup常用操作
参考文献:python : BeautifulSoup 格式美化 html
本文创建于2022.2.18/15.45,修改于2022.9.13/16.27