html.parser无法完全解析网页之BUG的修正

html.parser使用正则表达式解析html代码

在使用中发现部分网页无法完全解析,跟踪发现因为网页中有这样的代码

<a href="www.baidu.com"style="hot">badidu</a>

而html.parser定位tag使用的正则如下

locatestarttagend = re.compile(r"""
  <[a-zA-Z][-.a-zA-Z0-9:_]*          # tag name
  (?:\s+                             # whitespace before attribute name
    (?:[a-zA-Z_][-.:a-zA-Z0-9_]*     # attribute name
      (?:\s*=\s*                     # value indicator
        (?:‘[^‘]*‘                   # LITA-enclosed value
          |\"[^\"]*\"                # LIT-enclosed value
          |[^‘\">\s]+                # bare value
         )
       )?
     )
   )*
  \s*                                # trailing whitespace
""", re.VERBOSE)

它认为属性和属性间是有空格隔开的,遇到上面的例子就解析失败了

因此修改正则

locatestarttagend = re.compile(r"""
  <[a-zA-Z][-.a-zA-Z0-9:_]*              # tag name
  (?:\s*(?=>)                            # tag without attributes
    |\s+                                 # whitespace before attribute name
     (?:\s*                              # whitespace between attributes
        (?:[a-zA-Z_][-.:a-zA-Z0-9_]*     # attribute name
          (?:\s*=\s*                     # value indicator
            (?:‘[^‘]*‘                   # LITA-enclosed value
              |\"[^\"]*\"                # LIT-enclosed value
              |[^‘\">\s]+                # bare value
             )
           )?
        )
     )*
     \s*                                # trailing whitespace
  )
""", re.VERBOSE)

顺利解析全部网页

时间: 2024-09-30 18:54:39

html.parser无法完全解析网页之BUG的修正的相关文章

使用HttpParser类解析网页

之前发过一篇文章:利用String类制作简单的网络爬虫 http://blog.csdn.net/gfd54gd5f46/article/details/54729874 这是是基于String类里的substring()方法对字符串进行截取,从而得到想要的内容. 这种方法如果只是截取简单数据的话,还是可以实现的. 但是如果我要获取指定的数据(这个数据可能成千上万条),这时后用String类里面的方法就会很麻烦,而且要编写的代码会变的非常多. 现在我们要引用一个网页解析的工具类来帮助我们更方便的

python--爬虫入门(八)体验HTMLParser解析网页,网页抓取解析整合练习

python系列均基于python3.4环境  基本概念 html.parser的核心是HTMLParser类.工作的流程是:当你feed给它一个类似HTML格式的字符串时,它会调用goahead方法向前迭代各个标签,并调用对应的parse_xxxx方法提取start_tag,tag,data,comment和end_tag等等标签信息和数据,然后调用对应的方法对这些抽取出来的内容进行处理. 几个比较常用的: handle_startendtag #处理开始标签和结束标签 handle_star

Python爬虫解析网页的4种方式 值得收藏

用Python写爬虫工具在现在是一种司空见惯的事情,每个人都希望能够写一段程序去互联网上扒一点资料下来,用于数据分析或者干点别的事情. ? 我们知道,爬虫的原理无非是把目标网址的内容下载下来存储到内存中,这个时候它的内容其实是一堆HTML,然后再对这些HTML内容进行解析,按照自己的想法提取出想要的数据,所以今天我们主要来讲四种在Python中解析网页HTML内容的方法,各有千秋,适合在不同的场合下使用. 首先我们随意找到一个网址,这时我脑子里闪过了豆瓣这个网站.嗯,毕竟是用Python构建的网

使用java开源工具httpClient及jsoup抓取解析网页数据

今天做项目的时候遇到这样一个需求,需要在网页上展示今日黄历信息,数据格式如下 公历时间:2016年04月11日 星期一 农历时间:猴年三月初五 天干地支:丙申年 壬辰月 癸亥日 宜:求子 祈福 开光 祭祀 安床 忌:玉堂(黄道)危日,忌出行 主要包括公历/农历日期,以及忌宜信息的等.但是手里并没有现成的数据可供使用,怎么办呢? 革命前辈曾经说过,没有枪,没有炮,敌(wang)人(luo)给我们造!网络上有很多现成的在线 万年历应用可供使用,虽然没有现成接口,但是我们可以伸出手来,自己去拿.也就是

二 解析网页中元素

一 使用beautifulSoup 解析网页 Soup = BeantifulSoup(html,'lxml') 二 描述需要爬取的东西在哪? = Soup.select('???') 三 从标签中获得你要的信息 <p>Something</p> 去掉标签,并放到数据容器中. title.get_text() > Something title.tripped_strings>获取title目录下,所有标签. python 可以做列表>list(title.tri

使用Jsoup解析网页

之前已经发表过一篇使用HtmlParser类来解析视频网站的教程 http://blog.csdn.net/gfd54gd5f46/article/details/54960538 我发现htmlparser类太旧了,而且用起来语法也不清晰. 所以我又找来一个更强大的解析网页的工具类:Jsoup 来帮助我们制作更强大的网络爬虫 下载Jsoup类       jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址.HTML文本内容.它提供了一套非常省力的API,可通过DOM,CSS

Python中的urlparse、urllib抓取和解析网页(一)

对搜索引擎.文件索引.文档转换.数据检索.站点备份或迁移等应用程序来说,经常用到对网页(即HTML文件)的解析处理.事实上,通过Python 语言提供的各种模块,我们无需借助Web服务器或者Web浏览器就能够解析和处理HTML文档.本文将详细介绍如何利用Python抓取和解析网页.首 先,我们介绍一个可以帮助简化打开位于本地和Web上的HTML文档的Python模块,然后,我们论述如何使用Python模块来迅速解析在HTML文 件中的数据,从而处理特定的内容,如链接.图像和Cookie等.最后,

Jsoup登录解析网页信息

今天解析网页的时候,遇到必须登录后才能够访问的问题,在网上搜索了一些资料,反正有人做出来了,不过是使用HttpClient+Jsoup来实现的,我不清楚他们使用什么版本的Jsoup,地址:  HttpClient模拟登陆人人网,并且爬取日志内容(一),http://bbs.csdn.net/topics/390269063,查看现在的Jsoup API,可以直接模拟登陆,获取服务器返回的信息. 我这里是使用水木社区做Demo,其中下面的id和passwd分别是提交form表单中用户名和密码的

android中使用JSOUP如何解析网页数据详述

最近使用了Jsoup,感觉还是挺简单,挺方便的,轻而易举地抓取网页源码,分析获取各个标签所需的东西. 这几天在搞一个音乐播放器的小项目,其中使用到了就是使用JSOUP进行页面数据的获取,获取网页的歌曲列表,并对歌曲的链接进行加载,以便实现歌曲下载和歌词的下载.搞好之后,就会跟着写几篇博文,分享给大家.本博文主要说明android中使用jsoup如何进行网页数据的获取. 具体可看下面各个相关例子: Jsoup下载地址: http://jsoup.org/download jsoup开发指南,jso