html解析(etree.xpath、BeautifulSoup和pyquery )

etree.xpath 使用

参考网站:https://www.w3school.com.cn/xpath/xpath_functions.asp

第1步导入lxml模块

第2步 初始化准备要用处理的文件或者字符串

第3步,按照各种规则来提取第2步已经处理好的html

第一种:利用现有的html文件导入

from
lxml import etree html = etree.parse('./maoyan.html',etree.HTMLParser(encoding='utf-8')) //利用现有的html文件导入,使用方法 result01 = html.xpath('//i/ancestor::dd')

第2种,利用代码中的定义的text
text = '''
<div>
    <ul>
        <li class="item-0"><a href="link1.html">first item</a></li>
        <li class="item-1"><a href="link2.html">second item</a></li>
        <li class="item-inactive"><a href="link3.html">third item</a></li>
        <li class="item-1"><a href="link4.html">fourth item</a></li>
        <li class="item-0"><a href="link5.html">fifth item</a></li>
    </ul>
</div>
'''

html = etree.HTML(text) //直接使用初始化已经有的text

result = etree.tostring(html )
print(result.decode('utf-8'))

 

BeautifulSoup

参考网站:https://beautifulsoup.readthedocs.io/zh_CN/v4.4.0/#id14

第1步,导入BeautifulSoup

第2步,初始化准备要用处理的文件或者字符串

第3步,按照各种规则来提取第2步已经处理好的html


两种构造方法:

soup = BeautifulSoup(open("index.html"))

soup = BeautifulSoup("<html>data</html>")


from
bs4 import BeautifulSoup
#使用已经有的html来处理,建议使用
open先打开html,因为如果有中文字符的话,直接打开的话会出现中文乱码问题
html = open('maoyan.html','r',encoding='utf-8') 
soup
= BeautifulSoup(html,'lxml')
  print(type(soup.div.div.div.div.div.contents))


pyquery 

参考网站:https://pyquery.readthedocs.io/en/latest/index.html

 

第1步,

导入from pyquery import PyQuery as pq

第2步:初始化需要处理要用处理的文件或者字符串

第3步,按照各种规则来提取第2步已经处理好的html

构造方法:
 from pyquery import PyQuery as pq
 from lxml import etree
 import urllib

  1、直接字符串

  doc = pq("<html></html>")   pq 参数可以直接传入 HTML 代码,doc 现在就相当于 jQuery 里面的 $ 符号了

  2、lxml.etree

  doc = pq(etree.fromstring("<html></html>"))

  可以首先用 lxml 的 etree 处理一下代码,这样如果你的 HTML 代码出现一些不完整或者疏漏,都会自动转化为完整清晰结构的 HTML代码。

  3、直接传URL

  doc = pq('http://www.baidu.com')

  这里就像直接请求了一个网页一样,类似用 urllib2 来直接请求这个链接,得到 HTML 代码

  4、传文件

  doc = pq(filename='hello.html')可以直接传文件名

说明:

# 读取文件内容初始化,编码格式为GBK,当有不可识别字符时会报错,可通过open指定编码格式为utf-8来解决
html = open('maoyan.html','r',encoding='utf-8')
doc = pq(html.read())
print(doc('dd'))
 

 

posted @ 2021-05-15 14:46  yintian908  阅读(1158)  评论(0编辑  收藏  举报