zoukankan      html  css  js  c++  java
  • python之屏幕抓取

    Tidy 和 HTML 解析

    Beautiful Soup

      屏幕抓取:是通过程序下载网页并从中提取信息的过程。

      简单来见:下载数据并对其进行分析

      思路:可使用urllib来获取网页的HTML代码,再使用正则表达式从中提取信息。

      例如:假设要从python Job Board(http://python.org/jobs)提取招聘单位的名称和网站。

      通过查看该网站的源代码,可发现类似于下面的链接中找到名称和URL:

    <a href="/jobs/1970/">Python Engineer</a>

      如下:简单的屏幕抓取程序

    from urllib.request import urlopen
    import re
    p = re.compile('<a href="(/jobs/\d+)/">(.*?)</a>')
    text = urlopen('http://python.org/jobs').read().decode()
    for url,name in p.findall(text):
        print('{}({})'.format(name,url))

      以上代码需要跟进的地方:

      1.正则表达式一点都不容易理解。如果HTML代码和查询更复杂,那正则表达式就难以理解和维护

      2.无法处理独特的HTML内容;比如CDATA部分和实符字体(如&amp)

      

      正则表达式依赖于HTML代码的细节,并不是抽象的结构;意味着只要网页的结构发生一点点变化,那这个程序可能就无效了。

      针对基于正则表达式的方法存在的问题,可有两种解决方案:

    (1)结合使用程序Tidy(一个python库)和XHTML解析

      (2) 使用专为屏幕抓取而设计的Beautiful Soup

    Tidy 和XHTML解析

      Tidy是用于对格式不正确且不严谨的HTML进行修复的工具,它非常聪明,能够修复很多常见的错误,从而完成大量你不愿意做的工作。它还提供了极大的配置空间,让你能够开 / 关各种校正。

      当然,Tidy并不能修复HTML文件存在的所有问题,但确实能够确保文件是格式良好的(即所有元素都嵌套正确),这让解析工作容易很多。

      获取Tidy

      有多个用于python的Tidy库包装器,至于哪个最新并非固定不变的,找使用pip来找出可供使用的包装器:

    $pip search tidy

      可选择安装PyTidyLib:

    $ pip install pytidylib

      并非一定要安装Tidy库包装器。如果你是用的是unix或者linux系统,很可能已经默认安装了命令行版Tidy。此外,不管使用的是什么系统,都可以从Tidy网站上获取可执行的二进制版本,有了二进制版本之后,就可以使用模块subprocess(或其他包含open函数的模块)来运行Tidy程序了。

      如果python找不到tidy,可能需要提供这个可执行文件的完整路径。

      

      XHTML 和 HTML的主要区别在于,XHTML非常严格,要求显式地结束所有的元素;

      因此,在HTML可通过(使用标签<p>)开始另一个段落来结束当前段落,但在XHTML中,必须先(使用标签</p>)显式地结束当前段落。这让XHTML解析起来容易得多,因为你能清除地直到何时进入或者离开各种元素,

      XHTML的另一个优点:它是一种XML方言,可食用各种出色的工具(XPath)来处理

      要求对Tidy生成的格式良好的XHTML进行解析,一种非常简单的方式就是使用标准库模块html.parser中的HTMLParser类

     待补充~ 

  • 相关阅读:
    《面向对象》读书笔记4
    《面向对象》读书笔记3
    《面向对象》读书笔记2
    《面向对象》读书笔记1
    B树
    树的子结构
    最长公共子序列
    最长公共子串
    堆和堆排序
    位图的原理和简单实现
  • 原文地址:https://www.cnblogs.com/FlameLuo/p/9699444.html
Copyright © 2011-2022 走看看