Spider-Xpath
            
              
                
                  本文最后更新于:2024年11月13日 下午
                
              
            
            
              解析
1.xpath
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 
 | xpath使用:注意:提前安装xpath插件
 ( 1 )打开chrome浏览器
 ( 2 )点击右上角小圆点
 ( 3 )更多工具
 ( 4 )扩展程序
 ( 5 )拖拽xpath插件到扩展程序中
 ( 6 )如果crx文件失效,需要将后缀修改zip
 ( 7 )再次拖拽
 ( 8 )关闭浏览器重新打开
 ( 9 )ctrl + shift + x
 ( 10 )出现小黑框
 1.安装lxml库
 pip install lxml ‐i https:
 2.导入lxml.etree
 from lxml import etree
 3.etree.parse()   解析本地文件
 html_tree = etree.parse('XX.html')
 4.etree.HTML()    服务器响应文件
 html_tree = etree.HTML(response.read().decode('utf‐8')
 4.html_tree.xpath(xpath路径)
 
 | 
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 
 | xpath基本语法:1.路径查询
 //:查找所有子孙节点,不考虑层级关系
 / :找直接子节点
 2.谓词查询
 //div[@id]
 //div[@id="maincontent"]
 3.属性查询
 //@class
 4.模糊查询
 //div[contains(@id, "he")]
 //div[starts‐with(@id, "he")]
 5.内容查询
 //div/h1/text()
 6.逻辑运算
 //div[@id="head" and @class="s_down"]
 //title | //price
 
 | 
2.JsonPath
| 12
 3
 4
 5
 6
 
 | jsonpath的安装及使用方式:pip安装:
 pip install jsonpath
 jsonpath的使用:
 obj = json.load(open('json文件', 'r', encoding='utf‐8'))
 ret = jsonpath.jsonpath(obj, 'jsonpath语法')
 
 | 
案例练习:淘票票
作业:
2 .boos直聘
3 .中华英才
4 .汽车之家
3.BeautifulSoup
1 .基本简介
| 12
 3
 4
 5
 6
 7
 
 | 1.BeautifulSoup简称:bs
 2.什么是BeatifulSoup?
 BeautifulSoup,和lxml一样,是一个html的解析器,主要功能也是解析和提取数据
 3.优缺点?
 缺点:效率没有lxml的效率高
 优点:接口设计人性化,使用方便
 
 | 
2 .安装以及创建
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 
 | 1.安装pip install bs
 2.导入
 from bs4 import BeautifulSoup
 3.创建对象
 服务器响应的文件生成对象
 soup = BeautifulSoup(response.read().decode(), 'lxml')
 本地文件生成对象
 soup = BeautifulSoup(open('1.html'), 'lxml')
 注意:默认打开文件的编码格式gbk所以需要指定打开编码格式
 
 | 
3 .节点定位
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 
 | 1.根据标签名查找节点soup.a 【注】只能找到第一个a
 soup.a.name
 soup.a.attrs
 2.函数
 (1).find(返回一个对象)
 find('a'):只找到第一个a标签
 4.节点信息
 应用实例: 1.股票信息提取(http:
 2.中华英才网-旧版
 3 .腾讯公司招聘需求抓取(https:
 find('a', title='名字')
 find('a', class_='名字')
 (2).find_all(返回一个列表)
 find_all('a')  查找到所有的a
 find_all(['a', 'span'])  返回所有的a和span
 find_all('a', limit=2)  只找前两个a
 (3).select(根据选择器得到节点对象)【推荐】
 1.element
 eg:p
 2..class
 eg:.firstname
 3.#id
 eg:#firstname
 4.属性选择器
 [attribute]
 eg:li = soup.select('li[class]')
 [attribute=value]
 eg:li = soup.select('li[class="hengheng1"]')
 5.层级选择器
 element element
 div p
 element>element
 div>p
 element,element
 div,p
 eg:soup = soup.select('a,span')
 
 | 
4 .节点信息
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 
 | (1).获取节点内容:适用于标签中嵌套标签的结构    obj.string
 obj.get_text()【推荐】
 (2).节点的属性
 tag.name 获取标签名
 eg:tag = find('li)
 print(tag.name)
 tag.attrs将属性值作为一个字典返回
 (3).获取节点属性
 obj.attrs.get('title')【常用】
 obj.get('title')
 obj['title']
 
 | 
应用实例:
2 .中华英才网-旧版