一、常用xpath表达式

  • 属性定位:
    1. #找到class属性值为song的div标签
    2. //div[@class="song"]
  • 层级&索引定位:
    1. #找到class属性值为tang的div的直系子标签ul下的第二个子标签li下的直系子标签a
    2. //div[@class="tang"]/ul/li[2]/a
  • 逻辑运算:
    1. #找到href属性值为空且class属性值为du的a标签
    2. //a[@href="" and @class="du"]
  • 模糊匹配:
    1. //div[contains(@class, "ng")]
    2. //div[starts-with(@class, "ta")]
  • 取文本:
    1. # /表示获取某个标签下的文本内容
    2. # //表示获取某个标签下的文本内容和所有子标签下的文本内容
    3. //div[@class="song"]/p[1]/text()
    4. //div[@class="tang"]//text()
    5. 乱码:name = name.encode('ISO-8859-1').decode('gbk')  或 response.encoding='utf-8'
  • 取属性:
    1. //div[@class="tang"]//li[2]/a/@href
  • xpath函数返回的总是一个列表
  • 并集:a_list = tree.xpath('//div[@class="bottom"]/ul/li/a | //div[@class="bottom"]/ul/div[2]/li/a')
  • 注意:xpath表达式中不可以出现tbody标签

二、基础使用

  • 下载:pip install lxml
  • 导包:from lxml import etree
  • 官网推荐在现在的项目中使用Beautiful Soup 4, 移植到BS4
  • 将html文档或者xml文档转换成一个etree对象,然后调用对象中的方法查找指定的节点
  • 本地文件:
    1. tree = etree.parse('本地文件路径')
    2. etree.parse('D:/python3.6/scrapy/./test.html', etree.HTMLParser())
    3. tree.xpath("xpath表达式")
  • 网络数据:
    1. tree = etree.HTML("网络请求到的页面数据")
    2. tree.xpath("xpath表达式")
  • xpath插件:就可以直接将xpath表达式作用于浏览器的网页当中
  • 安装:更多工具-》扩展程序-》开启右上角的开发者模式-》xpath插件拖动到页面即可
  • 快捷键:启动和关闭插件 ctrl + shift + x

Beautifulsoup模块

  • Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.
  • Beautiful Soup会帮你节省数小时甚至数天的工作时间.你可能在寻找 Beautiful Soup3 的文档,Beautiful Soup 3 目前已经停止开发.
  • 官网推荐在现在的项目中使用Beautiful Soup 4, 移植到BS4
  • 官网推荐使用lxml作为解析器,因为效率更高.
  • 在Python2.7.3之前的版本和Python3中3.2.2之前的版本,必须安装lxml或html5lib, 因为那些Python版本的标准库中内置的HTML解析方法不够稳定.
  • 中文文档点击

一、环境安装

  • 需要将pip源设置为国内源,阿里源、豆瓣源、网易源等
  • windows:
    1. 打开文件资源管理器(文件夹地址栏中)
    2. 地址栏上面输入 %appdata%
    3. 在这里面新建一个文件夹 pip
    4. 在pip文件夹里面新建一个文件叫做 pip.ini ,内容写如下即可
    5. [global]
    6. timeout = 6000
    7. index-url = https://mirrors.aliyun.com/pypi/simple/
    8. trusted-host = mirrors.aliyun.com
  • linux:
    1. cd ~
    2. mkdir ~/.pip
    3. vi ~/.pip/pip.conf
    4. 编辑内容,和windows一模一样
  • 需要安装:pip install bs4
    1. bs4在使用时候需要一个第三方库,把这个库也安装一下
    2. pip install lxml

二、基础使用

核心思想:将html文档转换成Beautiful对象,然后调用该对象中的属性和方法进行html文档指定内容的定位查找。

1、使用流程

  • 导包:from bs4 import BeautifulSoup
  • 使用方式:可以将一个html文档,转化为BeautifulSoup对象,然后通过对象的方法或者属性去查找指定的节点内容
  • 转化本地文件:soup = BeautifulSoup(open('本地文件'), 'lxml')
  • 转化网络文件:soup = BeautifulSoup('字符串类型或者字节类型', 'lxml')
  • 打印soup对象显示内容为html文件中的内容

2、基础巩固

  • 根据标签名查找:
    1. soup.a 只能找到第一个符合要求的标签
  • 获取属性:
    1. soup.a.attrs 获取a所有的属性和属性值,返回一个字典
    2. soup.a.attrs['href'] 获取href属性
    3. soup.a['href'] 也可简写为这种形式
    4. soup.a.get('href')
  • 获取内容:
    1. soup.a.string
    2. soup.a.text
    3. soup.a.get_text()
    4. 【注意】如果标签还有标签,那么string获取到的结果为None,而其它两个,可以获取文本内容
  • find:找到第一个符合要求的标签:
    1. soup.find('a') 找到第一个符合要求的
    2. soup.find('a', title="xxx")
    3. soup.find('a', alt="xxx")
    4. soup.find('a', class_="xxx")
    5. soup.find('a', )
    6. soup.find('a',attr={'id':'xx'})
  • find_all:找到所有符合要求的标签:
    1. soup.find_all('a')
    2. soup.find_all(['a','b']) 找到所有的a和b标签
    3. soup.find_all('a', limit=2) 限制前两个
    4. soup.find('a',attr={'class':'xx'})[1:] 不要第一个
  • 根据选择器选择指定的内容:
    1. select:soup.select('#feng')
    2. 常见的选择器:标签选择器(a)、类选择器(.)、id选择器(#)、层级选择器
    3. 层级选择器:div .dudu #lala .meme .xixi 下面好多级
    4. 层级选择器:div > p > a > .lala 只能是下面一级
    5. 【注意】select选择器返回永远是列表,需要通过下标提取指定的对象
解析器 使用方法 优势 劣势
Python标准库 BeautifulSoup(markup, "html.parser")
  • Python的内置标准库
  • 执行速度适中
  • 文档容错能力强
  • Python 2.7.3 or 3.2.2)前 的版本中文档容错能力差
lxml HTML 解析器 BeautifulSoup(markup, "lxml")
  • 速度快
  • 文档容错能力强
  • 需要安装C语言库
lxml XML 解析器

BeautifulSoup(markup, ["lxml", "xml"])

BeautifulSoup(markup, "xml")

  • 速度快
  • 唯一支持XML的解析器
  • 需要安装C语言库
html5lib BeautifulSoup(markup, "html5lib")
  • 最好的容错性
  • 以浏览器的方式解析文档
  • 生成HTML5格式的文档
  • 速度慢
  • 不依赖外部扩展
解析库之xpath,beautifulsoup,pyquery
#安装 Beautiful Soup
pip install beautifulsoup4

#安装解析器
Beautiful Soup支持Python标准库中的HTML解析器,还支持一些第三方的解析器,其中一个是 lxml .根据操作系统不同,可以选择下列方法来安装lxml:

$ apt-get install Python-lxml

$ easy_install lxml

$ pip install lxml

另一个可供选择的解析器是纯Python实现的 html5lib , html5lib的解析方式与浏览器相同,可以选择下列方法来安装html5lib:

$ apt-get install Python-html5lib

$ easy_install html5lib

$ pip install html5lib
安装lxml

相关文章: