数据爬虫(六):爬虫PyQuery基本使用

PyQuery简介

pyquery相当于jQuery的python实现,可以用于解析HTML网页等。它的语法与jQuery几乎完全相同,对于使用过jQuery的人来说很熟悉,也很好上手。

引用作者的原话就是:

“The API is as much as possible the similar to jquery.” 。

安装

使用 pip 或者 easy_install 都可以。
注意:由于 pyquery 依赖于 lxml ,要先安装 lxml ,否则会提示失败。

  1. 安装lxml:https://pypi.python.org/pypi/lxml/2.3/ (建议直接下载安装包,方便快捷);
  2. 安装pyquery:easy_install pyquery 或者pip install pyquery;
  3. 验证:输入 import pyquery 回车不报错即安装成功

初始化

有 4 种方法可以进行初始化:
可以通过传入 字符串、lxml、文件 或者 url 来使用PyQuery。

 

1

2

3

4

5

from pyquery import PyQuery as pq

from lxml import etree d = pq(“”)#传入字符串

d = pq(etree.fromstring(“”))#传入lxml

d = pq(url=‘http://google.com/’) #传入url

d = pq(filename=path_to_html_file) #传入文件

现在,d 就像 jQuery 中的 $ 一样了。

字符串初始化

 

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

html = '''

    

'''

from pyquery import PyQuery as pq

doc = pq(html)

print(doc('li'))

查找所有的li标签。输出结果如下:

 

1

2

3

4

5

  • first item
  •         

  • second item
  •         

  • third item
  •         

  • fourth item
  •         

  • fifth item
  •  

    URL初始化

     

     

    1

    2

    3

    from pyquery import PyQuery as pq

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

    print(doc('head'))

    选出百度网站里面head标签里面的内容。
    输出结果如下:

     

    1

    百度一下,你就知道

     

    文件初始化

     

     

    1

    2

    3

    from pyquery import PyQuery as pq

    doc = pq(filename='demo.html')

    print(doc('li'))

     

    基本CSS选择器

     

     

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    html = '''

        

    '''

    from pyquery import PyQuery as pq

    doc = pq(html)

    print(doc('#container .list li'))

    选择id=container和list类下的里标签。空格代表一个嵌套。
    输出结果为:

     

    1

    2

    3

    4

    5

  • first item
  •         

  • second item
  •         

  • third item
  •         

  • fourth item
  •         

  • fifth item
  •  

    查找元素

    子元素

     

     

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    html = '''

        

    '''

    from pyquery import PyQuery as pq

    doc = pq(html)

    items = doc('.list')

    print(type(items))

    print(items)

    lis = items.find('li')

    print(type(lis))

    print(list)

    find找出所有li标签。
    输出结果为:

     

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

     

  • first item
  •         

  • second item
  •         

  • third item
  •         

  • fourth item
  •         

  • fifth item
  •  

    children

    查找所有的直接子元素

     

    1

    2

    lis = items.children('.active')

    print(lis)

    查找子元素里类为active类的元素。

    父元素

     

     

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    html = '''

        

    '''

    from pyquery import PyQuery as pq

    doc = pq(html)

    items = doc('.list')

    container = items.parent()

    print(type(container))

    print(container)

    输出:

     

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

        

     

    parents元素

     

     

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    html = '''

        

            

        

    '''

    from pyquery import PyQuery as pq

    doc = pq(html)

    items = doc('.list')

    parents = items.parents()

    print(type(parents))

    print(parents)

    输出:

     

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

        

            

        

            

        

    还可以加入参数进行筛选。

     

    1

    2

    parent = items.parents('.wrap')

    print(parent)

    选取类为wrap的标签。

    兄弟元素:

    代码:x.siblings()

    遍历

     

     

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    html = '''

        

            

        

    '''

    from pyquery import PyQuery as pq

    doc = pq(html)

    lis = doc('li').items()

    print(type(lis))

    for li in lis:

        print(li)

    .items()方法,返回一个迭代对象。

     

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

  • first item
  •  

  • second item
  •  

  • third item
  •  

  • fourth item
  •  

  • fifth item
  •  

    获取信息

     

     

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    html = '''

        

            

        

    '''

    from pyquery import PyQuery as pq

    doc = pq(html)

    a = doc('.item-0.active a')

    print(a)

    print(a.attr('href'))

    print(a.attr.href)

    选取a下属性为href的内容。

     

    1

    2

    3

    third item

    link3.html

    link3.html

     

    获取文本

     

     

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    html = '''

        

            

        

    '''

    from pyquery import PyQuery as pq

    doc = pq(html)

    a = doc('.item-0.active a')

    print(a)

    print(a.text())

    输出:

     

    1

    2

    third item

    third item

     

    获取html

     

     

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    html = '''

        

            

        

    '''

    from pyquery import PyQuery as pq

    doc = pq(html)

    li = doc('.item-0.active')

    print(li)

    print(li.html())

    输出:

     

    1

    2

    3

  • third item
  •             

    third item

     

    DOM操作

    addClass、removeClass增加类和删除类

     

     

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    html = '''

        

            

        

    '''

    from pyquery import PyQuery as pq

    doc = pq(html)

    li = doc('.item-0.active') //选择li标签

    print(li)

    li.removeClass('active') //移除active标签

    print(li)

    li.addClass('active')  //增加active镖旗啊

    print(li)

    输出结果:

     

    1

    2

    3

    4

    5

  • third item
  •  

  • third item
  •  

  • third item
  •  

    修改属性和css

     

     

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    html = '''

        

            

        

    '''

    from pyquery import PyQuery as pq

    doc = pq(html)

    li = doc('.item-0.active')

    print(li)

    li.attr('name', 'link')  //把li增加标签name=link。如果已经存在name属性则改变name=link。

    print(li)

    li.css('font-size', '14px')//设置font-size=14px

    print(li)

    输出结果:

     

    1

    2

    3

    4

    5

  • third item
  •  

  • third item
  •  

  • third item
  •  

    remove

     

     

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    html = '''

        Hello, World

        

    This is a paragraph.

    '''

    from pyquery import PyQuery as pq

    doc = pq(html)

    wrap = doc('.wrap')

    print(wrap.text())

    wrap.find('p').remove()

    print(wrap.text())

    如果只获取Hello,world
    .remove移除。
    运行结果:

     

    1

    2

    Hello, World This is a paragraph.

    Hello, World

     

    你可能感兴趣的:(python爬虫)