1、基于正则表达式的解析(全能的解析)
import re
pat = '构造正则表达式'
re.findall(pat, html)
2、基于 lxml 的 xpath 解析
from lxml import etree
1、
两种获取解析内容的途径
<1>
html = etree.HTML('爬取到的网页内容')
<2>
html = etree.parse('保存到本地的html路径')
2、
对获取内容进行解析
html.xpath('//a[@class = '***']') #获取所有的 a(class为'***')标签下的信息
html.xpath('//a//@href') #获取所有 a 标签下的所有的 href
html.xpath('//*/@class = '***'') #获取所有含有 class = '***' 的标签(可以结合正则表达式去使用)
html.xpath('//a/span') #获取所有 a 标签下的 span 标签的信息
3、基于 bs4 的 BeautifulSoup 解析
from bs4 import BeautifrlSoup
1、
获取解析html文本内容
<1>
soup = BeautifulSoup(html, 'lxml')
<2>
soup = BeautifrlSoup(open('html 路径'))
2、
对文本内容进行解析
soup.title('''标签名''') #获取所有title标签(注意:这里的括号不是参数,只是 title 的解释)
soup.title.name #获取标签的名字
soup.title.string #获得title标签的文本内容(如果title里面是标签,则返回空)
soup.title.attrs #获取title的所有属性(以字典形式返回)
soup.title.contents #获取直接子标签
soup.title.children #获取直接子标签的生成器,通过for循环获取数据
soup.title.descenddants #获取所有子标签的生成器
soup.parent #获取节点的上一级标签
soup.parents #获取结点的上一级标签的生成器
soup.next_sibling #返回下一平行节点的标签
soup.previous_sibling #返回上一平行节点的标签
soup.next_siblings #返回下一平行节点标签的生成器
soup.previous_siblings #返回上一平行节点标签的生成器
soup.Attributes #获取标签内非属性字符串
soup.NavigableString #获取标签内字符串的注释部分
soup.body #返回 body 标签
soup.head #返回 head 标签
soup.prettify() #为输出内容增加换行效果
soup.find() #搜索且只返回一个结果,同.find_all()参数
soup.find_parents() #在先辈节点中搜索,返回列表类型,同.find_all()参数
soup.find_parent() #在先辈节点中返回一个结果,同.find()参数
soup.find_next_siblings()
#在后续平行节点中搜索,返回列表类型,同.find_all()参数
soup.find_next_sibling()
#在后续平行节点中返回一个结果,同.find()参数
soup.find_previous_siblings()
#在前序平行节点中搜索,返回列表类型,同.find_all()
soup.find_previous_sibling()
#在前序平行节点中返回一个结果,同.find()参数
soup.find_all('td') #查找所有的td标签
soup.find_all(id = 'link') #查找所有ID为link的标签
soup.find_all(re.compile(pat)) #利用正则表达式查找标签
soup.select('a('''标签名''')') #找到所有标签名为a的标签
soup.select('.link') #找到所有的类名为link的标签
soup.select('#link') #获取所有ID为link的标签
soup.select('title #link') #找到title标签内所有ID为link的标签
soup.select('a[href = '***']') #找到所有href = '***'的a标签