使用HTMLParser解析器爬取网页内容
来源:互联网 发布:点歌软件 编辑:程序博客网 时间:2024/05/19 00:14
相关模块的安装
- 1.安装
requests
模块,在终端输入pip install requests
命令。使用requests
模块进行http请求,同时导入HTMLParser和re模块。
为了解决编码带来的困扰,默认使用utf8编码。
解析网页内容
- 1.网页的url是
http://www.gushiwen.org/gushi/tangshi.aspx
,该网页是个唐诗300首网页,里面有唐诗300首的标题和作者,点击某首唐诗进入其具体内容网页。我们想要抓取的内容是标题、作者、内容。 2.利用谷歌的chrome浏览器查看网页源代码。需要抓取的源代码如下:
打开其中的一个div标签,显示如下:
所以我们先抓取外层的div标签,这几个并列的div标签都有一个class属性为guwencont2,识别出外层的标签后就可以抓取内层的a标签的内容,包含古诗的标题和作者。还需要抓取该古诗的url,即为href属性值,例如/GuShiWen_6299b969fb.aspx
,该内容拼接原始url为http://www.gushiwen.org
成http://www.gushiwen.org/GuShiWen_6299b969fb.aspx
即为具体内容网页。- 3.来到古诗的具体内容网页,同样利用chrome的开发者工具显示源代码,显示如下:
内容在p标签中,有一个align属性为center。 4.分析完如何解析出标题作者和内容后,开始写代码。自定义一个解释器继承
HTMLParser
,在重写初始化函数__init__
时要先初始化父类HTMLParser.__init__(self)
在初始化函数中定义一个字典,用于存储爬取到的标题作者和内容(1首诗对应一个字典),定义一个列表用于存储字典(列表中存储所有诗对应的字典)。定义几个标志位(用于标记上面分析的几个需要找到的标签),以及一个正则表达式(用于分离标题和作者)
- 定义一个解析属性函数,html标签中的属性和属性值在htmlparser解析器中是个tuple类型,返回属性名对应的属性值。
- 重写handle_starttag函数,该函数在查找到标签头自动调用,attrs包含该标签tag中所有的属性和属性值,类型是个列表,其中的元素都是tuple类型(属性名,属性值)。
- 重写handle_endtag函数,该函数在查找到标签末位自动调用
- 重写handle_data函数,该函数在查找到标签中的内容自动调用,利用正则表达式进行了匹配,如果匹配成功,匹配出来的组即为标题和作者。
- 定义一个解析属性函数,html标签中的属性和属性值在htmlparser解析器中是个tuple类型,返回属性名对应的属性值。
5.实例化上面写的SongciParser类,传入原始url,使用
requests
获得响应,把响应的内容喂给实例化的解析器。
在主函数中执行如下代码
解析具体网页的内容
- 1.经过上面的解析,已经可以解析出唐诗300首的标题和作者,并且获得了每首古诗的url,接下来进入到具体古诗网页中获取内容。同样需要自定义一个解析器(继承HTMLParser)
- 2.加载每首古诗的url获取内容,进行了换行处理
在主函数中调用如下,这个只加载了前10首古诗
下面是运行的结果
0 0
- 使用HTMLParser解析器爬取网页内容
- htmlparser解析网页内容代码
- 基于htmlparser实现网页内容解析
- 基于htmlparser实现网页内容解析
- python使用HTMLParser和BeautifulSoup解析网页
- python使用HTMLParser和BeautifulSoup解析网页
- 基于htmlparser实现网页内容解析 (主题爬虫)
- 解析网页工具HTMLParser
- 学习HTMLParser解析网页
- 利用htmlparser抓取网页内容
- htmlParser解析网页链接问题
- htmlparser lexer解析网页源代码
- htmlparser lexer解析网页源代码
- htmlparser解析网页基本代码
- Python使用HTMLParser.HTMLParser处理网页
- 使用HtmlParser解析HTML
- 使用HtmlParser解析HTML
- 使用HtmlParser解析HTML
- Android百度地图(二)
- 八大排序算法
- 用户和组管理
- Solr6自定义mmseg4j中文分词库,升级mmseg4j
- Linux下TI omap芯片 MUX 配置分析(以AM335X芯片为例)
- 使用HTMLParser解析器爬取网页内容
- iTween基础之Value(数值过度)
- Hibernate面试题 --- list和iterator方法的区别
- ECMAScript6笔记:字符串的扩展(2)
- Windows 10无法设置静态IP的解决办法
- 【C/C++】int,string,char之间转换
- visual C++ 6.0开发工具与调试
- iTween基础之Look(使对象面朝指定位置)
- bgslibrary视频前景提取算法之三帧差法(二)