分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 代码编程

HTMLParser和BeautifulSoup使用入门和总结

发布时间:2023-09-06 02:00责任编辑:熊小新关键词:HTML

1.HTMLParser一般这么用:

from html.parser import HTMLParser
from urllib import request

class MyHtmlParser(HTMLParser):

???def __init__(self):
???????HTMLParser.__init__(self)
???????self.categories = []
???????self.in_a = False

???def handle_starttag(self, tag, attrs):
???????def _attr(attrs,attrname):
???????????for attr in attrs:
???????????????if attr[0] == attrname:
???????????????????return attr[1]
???????????return None
???????if tag == ‘a‘ and _attr(attrs,‘role‘) == ‘menuitem‘:
???????????self.in_a = True

???def handle_endtag(self, tag):
???????if tag == ‘a‘ and self.in_a:
???????????self.in_a = False

???def handle_data(self, data):
???????if self.in_a:
???????????self.categories.append(data)

2.BeautifulSoup一般这样:

soup = BeautifulSoup(price_html,‘html.parser‘)
soup.find_all(‘div‘,class_=‘abcd‘

3.HTMLParser遇到div嵌套,handle_endtag里关闭div开关会提前关闭,试了很久目前没想出解决方案。

3.BeautifulSoup的find(‘div‘, class_=‘test‘)是find_all(...)的特殊情况,只匹配第一次。class是python预留关键字,所以加下划线区分,也可以这样attrs={‘class‘:‘test‘)。其中test还可以用正则表达式来匹配。

4.如果没有span, tag.div.a.span=None, tag.div.a.span.string会报错。

5.BeautifulSoup遇到问题:<a>kkk<span>lang</span></a>, a.string无法获得kkk, 就因为a里面嵌套了<span>

6.BeautifulSoup先读取整个html,生成对象树,比较耗内存,速度慢。但是比HTMLParser更方便使用。

HTMLParser和BeautifulSoup使用入门和总结

原文地址:https://www.cnblogs.com/jdbc2nju/p/9189208.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved