一、XPath

from lxml import etree

html = etree.parse('html源代码',etree.HTMLPaser())

1.节点的获取

  a.html.xpath('//*')  #匹配HTML中的所有节点

  b.html.xapth('//li') #匹配所有的li节点

  c.// 获取所有的子孙节点   ‘/’  获取子节点(区别好 '//'  与  '/')

  d.html.xapth('//li[@class='item-0']')  #根据属性匹配

  e.html.xapth('//li[contains(@class,'li')])  #属性多值匹配 contains()方法,第一个参数传入属性名称,第二个参数传入属性值,只要此属性包含所传入的属性值就可以完成匹配

  f.多属性匹配  .html.xapth('//li[contains(@class,'li') and @name='item'])

  g.按顺序选择 html.xapth('//li[last()]') 最后一个li节点

     html.xapth('//li[position()<3]') 位置小于3的li节点

     html.xapth('//li[1]')  选择第一个li节点

  h.节点轴选择 html.xapth('//li/child::')  直接子节点

     html.xapth('//li/ancestor::') 所有祖先节点

   html.xapth('//li'/attribute::)  获取所有的属性值

   html.xapth('//li/decendant::') 获取所有的子孙节点

  2.属性,文本获取

    (1).文本获取

      html.xapth('//li/text()')

    (2).属性获取

      html.xapth('//li/@class')  #获取li标签的class的属性值

二、BeautifulSoup

1.节点选择器

  直接调用节点名称就可以选择节点元素,在调用string属性就可以得到节点内的文本

  eg:soup.title.string

  a.提取信息:可以通过name属性获得节点的名称      soup.title.name

  b.获取属性:每个节点有多个属性,比如 id,class等。选择这个节点元素之后,可以调用attrs获取所有的属性    soup.p.attrs    

       soup.p.attrs[‘name’]  获取属性name的值      另一种简单的方式:soup.p['name']

  c.获取内容:soup.p.string   获取p标签的内容

2.嵌套选择:比如我们之前获取了head的节点元素,我们可以继续调用head来选去head的内部元素

3.关联选择

  a.子节点与子孙节点:  soup.p.contents 获取p标签元素的所有直接子节点,返回的是列表

              soup.p.children 也是返回p标签元素的所有直接子节点, 不过返回的是生成器

              soup.p.descendants 返回p标签的所有的子孙节点,返回的是生成器

  b.父节点和祖先节点

              soup.p.parent  返回的是p标签的直接父节点

              soup.p.parents 返回的是p标签的所有祖先节点,返回的是生成器

  c.兄弟节点  

              soup.p.next_slibling  返回的是节点的下一个节点

              soup.p.next_sliblings      返回的是下面的所有的兄弟节点,返回的是生成器

              soup.p.previous_slibling  返回的是上一个兄弟节点

              soup.p.previous_slibling  返回的是上面的所有的兄弟节点,返回的生成器

4.方法选择器

  a.find_all()   查找所有符合的元素,返回的是列表     find_all(name,attrs,recursive,tetxt,**kwargs)

    name:根据节点名称查询元素  soup.find_all(name='ul')   查询文档树中所有的ul的标签元素

    attrs:根据属性查询节点   soup.find_all(attr={'id':'list-1'})  查询文档树中所有id属性值为‘list-1’的元素

    text:   根据文本查询节点 传入的的形式可以是字符串,也可以是正则表达式对象   soup.find_all(text=re.compile('link'))   查询文本中所有含link的标签元素

  b.find()  find 返回的生死单个元素,也就是匹配的第一个元素,方法同find_all()

  c. find_parents(),find_parent(),find_next_siblings(),find_next_sibling(),find_previous_siblings(),find_next_sibling(),find_all_next(),find_next(),find_all_prevous(),find_privous()

   这一组方法都是和find_all()与find()一致

5.CSS选择器

  使用CSS选择器时,只需要调用select() 方法,传入相应的CSS选择器即可

  soup.select('CSS选择器')

三、pyquery

import pyquery as pq

doc = pq(html文档or url)

1.基本CSS选择器

  doc('CSS选择器')

2.查找节点

  a.查找子节点:find()方法  find()方法查找的是所有的子孙节点,如果只想查找子节点,可以用children()方法;find()或者children()方法直接传入CSS选择器即可

  b.查找父节点:parent()  查询直接父节点,parents() 查找祖先节点    都是传入CSS选择器即可

  c.兄弟节点:siblings() 筛选摸个兄弟节点可以传入CSS选择器

3.遍历:对于多个节点的结果,就需要遍历,需要调用items()方法  doc('li').items()   遍历所有的li标签元素

4.获取信息

  a.获取属性   提取到节点之后,就可以调用attr()方法获取属性  doc('.item-0.active a').attr('href')

          也可以通过调用attr属性来获取属性    doc('.item-0.active a').attr.href  (说明:当返回结果包含多个节点时,调用attr()方法智慧得到第一个属性值)

  b获取文本内容:调用text()方法   doc('.item-0.active a').text()

  c.获取HTML文本 ,调用html()方法   doc('.item-0.active a').html()

5.节点操作

  a.addClass(),removeClass() 动态的改变节点的class的属性值

  b.attr,text,html 修改属性值,文本内容,html文本

     doc('.item-0.active a').attr('name','link'); doc('.item-0.active a').text('changed item');   doc('.item-0.active a').html('<span> change item</span>')

  c.remove 移除,可以将特定的节点移除   doc('.item-0.active a').remove()

6.伪类选择器(举例说明):

  a. li = doc('li:first-child')

  b. li = doc('li:last-child')

  c. li = doc('li:nth-child(2)')

  d. li = doc('li:gt(2)')

  e .li = doc('li:nth-child(2n)')

  f. li = doc('li:contain(second))

好了就写到这了!!!!!!!!!!!!!!!!!!!!!!!

xPath,beautifulsoup和pyquery的更多相关文章

  1. 四大解析器(BeautifulSoup、PyQuery、lxml、正则)性能比较

    用标题中的四种方式解析网页,比较其解析速度.当然比较结果数值与电脑配置,python版本都有关系,但总体差别不会很大. 下面是我的结果,lxml xpath最快,bs4最慢 ==== Python v ...

  2. 02 爬虫数据解析之re,xpath,beautifulsoup

    一.正则匹配 简单用法演示: 字符: print(re.findall(".","abccc31223dn哈哈")) ### . 匹配除了换行符以外的任意字符, ...

  3. 使用beautifulsoup和pyquery爬小说

    # -*- coding:UTF-8 -*- from bs4 import BeautifulSoup #BeautifulSoup就是处理字符串的工具 import requests, sys & ...

  4. Python3 BeautifulSoup和Pyquery解析库随笔

    BeautifuSoup和Pyquery解析库方法比较 1.对象初始化: BeautifySoup库: from bs4 import BeautifulSoup html = 'html strin ...

  5. re,xpath,BeautifulSoup三种方法爬取古诗词网上诗歌

    re,xpath ,bs4对同一个页面的解析速度发现re比xpath快接近10倍,xpath比bs4快接近10倍可见要想追求极致速度,使用正则表达式解析有多重要 1.re解析的代码 # 使用正则表达式 ...

  6. 解析库之re、beautifulsoup、pyquery

    BeatifulSoup模块 一.介绍 Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.Be ...

  7. 爬虫之解析库-----re、beautifulsoup、pyquery

    一.介绍 Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.Beautiful Soup会帮你 ...

  8. 第三篇:解析库之re、beautifulsoup、pyquery

    BeatifulSoup模块 一.介绍 Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.Be ...

  9. 关于js渲染网页时爬取数据的思路和全过程(附源码)

    于js渲染网页时爬取数据的思路 首先可以先去用requests库访问url来测试一下能不能拿到数据,如果能拿到那么就是一个普通的网页,如果出现403类的错误代码可以在requests.get()方法里 ...

随机推荐

  1. 微信小程序中input标签高度设置

    如果没有设置高度所以显示的是控件自身的高度. 微信小程序input控件原始设置: 上图发现: 我只覆盖了官方input的height,而没有覆盖min-height; .query input{ bo ...

  2. GetQueuedCompletionStatus客户端前端和server之间的通信

    项目中遇到了这个东西,怎么都调试不到.记录下. 一.完成端口IOCP https://www.cnblogs.com/yuanchenhui/p/iocp_windows.html

  3. MySQL:初识数据库

    对于大型互联网公司来说,数据的重要性可能比软件本身更重要.据说淘宝业务系统的开发大概消耗约7000万人民币,而其保存的用户数据的价值远高于此,加上数据分析算法的加持,其产生的价值和收益无疑是巨大的,远 ...

  4. 翻译:《实用的Python编程》03_02_More_functions

    目录 | 上一节 (3.1 脚本) | 下一节 (3.3 错误检查) 3.2 深入函数 尽管函数在早先时候介绍了,但有关函数在更深层次上是如何工作的细节却很少提供.本节旨在填补这些空白,并讨论函数调用 ...

  5. HTTP头Content-Type类型记录

    默认发POST格式 Content-Type: application/x-www-form-urlencoded Content-Type: application/x-www-form-urlen ...

  6. Java多态练习题

    需求: 宠物饿了,需要铲屎官给宠物喂食. 不同宠物吃的东西不一样. 不同宠物恢复后体力值不一样. 铲屎官和狗狗玩接飞盘游戏,狗狗健康值减少10,与铲屎官亲密度增加5 铲屎官和 企鹅玩游泳游戏,企鹅健康 ...

  7. Airbnb JavaScript代码规范(完整)

    类型Types 基本数据类型 string number boolean null undefined symbol const foo = 1; let bar = foo; bar = 9; co ...

  8. ApiTesting全链路接口自动化测试框架 - 新增数据库校验(二)

    在这之前我完成了对于接口上的自动化测试:ApiTesting全链路接口自动化测试框架 - 初版(一) 但是对于很多公司而言,数据库的数据校验也尤为重要,另外也有小伙伴给我反馈希望支持. 所以最近几天我 ...

  9. P1725 琪露诺 题解(单调队列)

    题目链接 琪露诺 解题思路 单调队列优化的\(dp\). 状态转移方程:\(f[i]=max{f[i-l],f[i-l+1],...,f[i-r-1],f[i-r]}+a[i]\) 考虑单调队列优化. ...

  10. Java 并发编程之 Condition 接口

    本文部分摘自<Java 并发编程的艺术> 概述 任意一个 Java 对象,都拥有一个监视器方法,主要包括 wait().wait(long timeout).notify() 以及 not ...