常见的爬虫分析库(4)-爬虫之PyQuery

PyQuery 是 Python 仿照 jQuery 的严格实现。语法与 jQuery 几乎完全相同。

官方文档:http://pyquery.readthedocs.io/

安装


1

pip install pyquery

初始化

字符串初始化


1

2

3

4

5

6

7

8

9

10

11

12

13

14

html = ‘‘‘

<div>

    <ul>

         <li class="item-0">first item</li>

         <li class="item-1"><a href="link2.html">second item</a></li>

         <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>

         <li class="item-1 active"><a href="link4.html">fourth item</a></li>

         <li class="item-0"><a href="link5.html">fifth item</a></li>

     </ul>

 </div>

‘‘‘

from pyquery import PyQuery as pq

doc = pq(html)

print(doc(‘li‘))

 

URL初始化


1

2

3

from pyquery import PyQuery as pq

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

print(doc(‘head‘))

 

文件初始化


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 = ‘‘‘

<div id="container">

    <ul class="list">

         <li class="item-0">first item</li>

         <li class="item-1"><a href="link2.html">second item</a></li>

         <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>

         <li class="item-1 active"><a href="link4.html">fourth item</a></li>

         <li class="item-0"><a href="link5.html">fifth item</a></li>

     </ul>

 </div>

‘‘‘

from pyquery import PyQuery as pq

doc = pq(html)

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

 

查找元素

子元素


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

html = ‘‘‘

<div id="container">

    <ul class="list">

         <li class="item-0">first item</li>

         <li class="item-1"><a href="link2.html">second item</a></li>

         <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>

         <li class="item-1 active"><a href="link4.html">fourth item</a></li>

         <li class="item-0"><a href="link5.html">fifth item</a></li>

     </ul>

 </div>

‘‘‘

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(lis)

 


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

html = ‘‘‘

<div id="container">

    <ul class="list">

         <li class="item-0">first item</li>

         <li class="item-1"><a href="link2.html">second item</a></li>

         <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>

         <li class="item-1 active"><a href="link4.html">fourth item</a></li>

         <li class="item-0"><a href="link5.html">fifth item</a></li>

     </ul>

 </div>

‘‘‘

from pyquery import PyQuery as pq

doc = pq(html)

items = doc(‘.list‘)

lis = items.children()

print(type(lis))

print(lis)

 


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

html = ‘‘‘

<div id="container">

    <ul class="list">

         <li class="item-0">first item</li>

         <li class="item-1"><a href="link2.html">second item</a></li>

         <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>

         <li class="item-1 active"><a href="link4.html">fourth item</a></li>

         <li class="item-0"><a href="link5.html">fifth item</a></li>

     </ul>

 </div>

‘‘‘

from pyquery import PyQuery as pq

doc = pq(html)

items = doc(‘.list‘)

lis = items.children(‘.active‘)

print(lis)

 

父元素


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

html = ‘‘‘

<div id="container">

    <ul class="list">

         <li class="item-0">first item</li>

         <li class="item-1"><a href="link2.html">second item</a></li>

         <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>

         <li class="item-1 active"><a href="link4.html">fourth item</a></li>

         <li class="item-0"><a href="link5.html">fifth item</a></li>

     </ul>

 </div>

‘‘‘

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

11

12

13

14

15

16

17

18

19

html = ‘‘‘

<div class="wrap">

    <div id="container">

        <ul class="list">

             <li class="item-0">first item</li>

             <li class="item-1"><a href="link2.html">second item</a></li>

             <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>

             <li class="item-1 active"><a href="link4.html">fourth item</a></li>

             <li class="item-0"><a href="link5.html">fifth item</a></li>

         </ul>

     </div>

 </div>

‘‘‘

from pyquery import PyQuery as pq

doc = pq(html)

items = doc(‘.list‘)

parents = items.parents()

print(type(parents))

print(parents)

 


1

2

parent = items.parents(‘.wrap‘)

print(parent)

 

兄弟元素


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

html = ‘‘‘

<div class="wrap">

    <div id="container">

        <ul class="list">

             <li class="item-0">first item</li>

             <li class="item-1"><a href="link2.html">second item</a></li>

             <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>

             <li class="item-1 active"><a href="link4.html">fourth item</a></li>

             <li class="item-0"><a href="link5.html">fifth item</a></li>

         </ul>

     </div>

 </div>

‘‘‘

from pyquery import PyQuery as pq

doc = pq(html)

li = doc(‘.list .item-0.active‘)

print(li.siblings())

 


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

html = ‘‘‘

<div class="wrap">

    <div id="container">

        <ul class="list">

             <li class="item-0">first item</li>

             <li class="item-1"><a href="link2.html">second item</a></li>

             <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>

             <li class="item-1 active"><a href="link4.html">fourth item</a></li>

             <li class="item-0"><a href="link5.html">fifth item</a></li>

         </ul>

     </div>

 </div>

‘‘‘

from pyquery import PyQuery as pq

doc = pq(html)

li = doc(‘.list .item-0.active‘)

print(li.siblings(‘.active‘))

 

遍历

单个元素


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

html = ‘‘‘

<div class="wrap">

    <div id="container">

        <ul class="list">

             <li class="item-0">first item</li>

             <li class="item-1"><a href="link2.html">second item</a></li>

             <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>

             <li class="item-1 active"><a href="link4.html">fourth item</a></li>

             <li class="item-0"><a href="link5.html">fifth item</a></li>

         </ul>

     </div>

 </div>

‘‘‘

from pyquery import PyQuery as pq

doc = pq(html)

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

print(li)

 


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

html = ‘‘‘

<div class="wrap">

    <div id="container">

        <ul class="list">

             <li class="item-0">first item</li>

             <li class="item-1"><a href="link2.html">second item</a></li>

             <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>

             <li class="item-1 active"><a href="link4.html">fourth item</a></li>

             <li class="item-0"><a href="link5.html">fifth item</a></li>

         </ul>

     </div>

 </div>

‘‘‘

from pyquery import PyQuery as pq

doc = pq(html)

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

print(type(lis))

for li in lis:

    print(li)

 

获取信息

获取属性


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

html = ‘‘‘

<div class="wrap">

    <div id="container">

        <ul class="list">

             <li class="item-0">first item</li>

             <li class="item-1"><a href="link2.html">second item</a></li>

             <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>

             <li class="item-1 active"><a href="link4.html">fourth item</a></li>

             <li class="item-0"><a href="link5.html">fifth item</a></li>

         </ul>

     </div>

 </div>

‘‘‘

from pyquery import PyQuery as pq

doc = pq(html)

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

print(a)

print(a.attr(‘href‘))

print(a.attr.href)

 

获取文本


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

html = ‘‘‘

<div class="wrap">

    <div id="container">

        <ul class="list">

             <li class="item-0">first item</li>

             <li class="item-1"><a href="link2.html">second item</a></li>

             <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>

             <li class="item-1 active"><a href="link4.html">fourth item</a></li>

             <li class="item-0"><a href="link5.html">fifth item</a></li>

         </ul>

     </div>

 </div>

‘‘‘

from pyquery import PyQuery as pq

doc = pq(html)

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

print(a)

print(a.text())

 

获取HTML


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

html = ‘‘‘

<div class="wrap">

    <div id="container">

        <ul class="list">

             <li class="item-0">first item</li>

             <li class="item-1"><a href="link2.html">second item</a></li>

             <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>

             <li class="item-1 active"><a href="link4.html">fourth item</a></li>

             <li class="item-0"><a href="link5.html">fifth item</a></li>

         </ul>

     </div>

 </div>

‘‘‘

from pyquery import PyQuery as pq

doc = pq(html)

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

print(li)

print(li.html())

 

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 = ‘‘‘

<div class="wrap">

    <div id="container">

        <ul class="list">

             <li class="item-0">first item</li>

             <li class="item-1"><a href="link2.html">second item</a></li>

             <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>

             <li class="item-1 active"><a href="link4.html">fourth item</a></li>

             <li class="item-0"><a href="link5.html">fifth item</a></li>

         </ul>

     </div>

 </div>

‘‘‘

from pyquery import PyQuery as pq

doc = pq(html)

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

print(li)

li.removeClass(‘active‘)

print(li)

li.addClass(‘active‘)

print(li)

 

attr、css


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

html = ‘‘‘

<div class="wrap">

    <div id="container">

        <ul class="list">

             <li class="item-0">first item</li>

             <li class="item-1"><a href="link2.html">second item</a></li>

             <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>

             <li class="item-1 active"><a href="link4.html">fourth item</a></li>

             <li class="item-0"><a href="link5.html">fifth item</a></li>

         </ul>

     </div>

 </div>

‘‘‘

from pyquery import PyQuery as pq

doc = pq(html)

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

print(li)

li.attr(‘name‘‘link‘)

print(li)

li.css(‘font-size‘‘14px‘)

print(li)

 

remove


1

2

3

4

5

6

7

8

9

10

11

12

html = ‘‘‘

<div class="wrap">

    Hello, World

    <p>This is a paragraph.</p>

 </div>

‘‘‘

from pyquery import PyQuery as pq

doc = pq(html)

wrap = doc(‘.wrap‘)

print(wrap.text())

wrap.find(‘p‘).remove()

print(wrap.text())

 

其他DOM方法 http://pyquery.readthedocs.io/en/latest/api.html

伪类选择器


1

2

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

html = ‘‘‘

<div class="wrap">

    <div id="container">

        <ul class="list">

             <li class="item-0">first item</li>

             <li class="item-1"><a href="link2.html">second item</a></li>

             <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>

             <li class="item-1 active"><a href="link4.html">fourth item</a></li>

             <li class="item-0"><a href="link5.html">fifth item</a></li>

         </ul>

     </div>

 </div>

‘‘‘

from pyquery import PyQuery as pq

doc = pq(html)

li = doc(‘li:first-child‘)

print(li)

li = doc(‘li:last-child‘)

print(li)

li = doc(‘li:nth-child(2)‘)

print(li)

li = doc(‘li:gt(2)‘)

print(li)

li = doc(‘li:nth-child(2n)‘)

print(li)

li = doc(‘li:contains(second)‘)

print(li)

原文地址:https://www.cnblogs.com/yunlongaimeng/p/9802108.html

时间: 2024-10-29 20:27:53

常见的爬虫分析库(4)-爬虫之PyQuery的相关文章

常见的爬虫分析库(2)-xpath语法

xpath简介 1.xpath使用路径表达式在xml和html中进行导航 2.xpath包含标准函数库 3.xpath是一个w3c的标准 xpath节点关系 1.父节点 2.子节点 3.同胞节点 4.先辈节点 5.后代节点 xpath语法 表达式 s说明 article  选取所有article元素的子节点 /article  选取根元素article article/a 选取所有属于article的子元素a的元素 //div  选取所有div子元素(不论出现在文档任何地方) /article/

常见的爬虫分析库(3)-Python正则表达式与re模块

在线正则表达式测试 http://tool.oschina.net/regex/ 常见匹配模式 模式 描述 \w 匹配字母数字及下划线 \W 匹配非字母数字下划线 \s 匹配任意空白字符,等价于 [\t\n\r\f]. \S 匹配任意非空字符 \d 匹配任意数字,等价于 [0-9] \D 匹配任意非数字 \A 匹配字符串开始 \Z 匹配字符串结束,如果是存在换行,只匹配到换行前的结束字符串 \z 匹配字符串结束 \G 匹配最后匹配完成的位置 \n 匹配一个换行符 \t 匹配一个制表符 ^ 匹配字

python&amp;php数据抓取、爬虫分析与中介,有网址案例

最近在做一个网络爬虫程序,后台使用python不定时去抓取数据,前台使用php进行展示 网站是:http://se.dianfenxiang.com python&php数据抓取.爬虫分析与中介,有网址案例,布布扣,bubuko.com

爬虫requests库的方法与参数

爬虫requests库的方法与参数 import requests """ # 1. 方法 requests.get requests.post requests.put requests.delete ... requests.request(method='POST') """ # 2. 参数 """ 2.1 url 2.2 headers 2.3 cookies 2.4 params 2.5 data,传请求体

python爬虫常用库

请求库: 1. requests 这个库是爬虫最常用的一个库 2. Selenium Selenium 是一个自动化测试工具,利用它我们可以驱动浏览器执行特定的动作,如点击.下拉等操作 对于一些用JS做谊染的页面来说,这种抓取方式是非常有效的. 3.ChomeDrive 安装了这个库,才能驱动Chrome浏览器完成相应的操作 4.GeckoDriver 使用W3C WebDriver兼容客户端与基于Gecko的浏览器进行交互的代理. 5.PhantomJS PhantomJS 是一个无界面 .可

爬虫是什么,爬虫能干啥,爬虫怎么爬,一篇文章教会你所有

这篇文章的定位是,给有一些python基础,但是对爬虫一无所知的人写的.文中只会涉及到爬虫最核心的部分,完全避开莫名其妙的坑或概念,让读者觉得爬虫是一件非常简单的事情,而事实上爬虫确实是一件非常简单的事情(如果你不是以爬虫为工作的话). 本文分为如下几个部分 引言 概念介绍 HTML介绍 解析代码介绍 chrome检查工具介绍 引言 简单理解网络爬虫就是自动抓取网页信息的代码,可以简单理解成代替繁琐的复制粘贴操作的手段.首先必须声明,爬虫的对象必须是你已经看到的网页,比如你不能说你想找到知乎上哪

python之爬虫(二)爬虫的原理

在上文中我们说了:爬虫就是请求网站并提取数据的自动化程序.其中请求,提取,自动化是爬虫的关键!下面我们分析爬虫的基本流程 爬虫的基本流程 发起请求通过HTTP库向目标站点发起请求,也就是发送一个Request,请求可以包含额外的header等信息,等待服务器响应 获取响应内容如果服务器能正常响应,会得到一个Response,Response的内容便是所要获取的页面内容,类型可能是HTML,Json字符串,二进制数据(图片或者视频)等类型 解析内容得到的内容可能是HTML,可以用正则表达式,页面解

爬虫(Spider),反爬虫(Anti-Spider),反反爬虫(Anti-Anti-Spider)

爬虫(Spider),反爬虫(Anti-Spider),反反爬虫(Anti-Anti-Spider),这之间的斗争恢宏壮阔... Day 1小莫想要某站上所有的电影,写了标准的爬虫(基于HttpClient库),不断地遍历某站的电影列表页面,根据 Html 分析电影名字存进自己的数据库.这个站点的运维小黎发现某个时间段请求量陡增,分析日志发现都是 IP(1.1.1.1)这个用户,并且 useragent 还是 JavaClient1.6 ,基于这两点判断非人类后直接在Nginx 服务器上封杀.

Python爬虫【一】爬虫的基本原理

一.爬虫基本原理 1.获取网络数据 用户方式:浏览器提交请求->下载网页代码->解析/渲染成页面 爬虫方式:模拟浏览器发送请求->下载网页代码->只提取有用的数据->存放于数据库或文件中 2.爬虫的基本原理 向网站发起请求,获取资源后分析并提取有用数据的程序 3.爬虫的基本流程 #1.发起请求使用http库向目标站点发起请求,即发送一个Request,Request包含:请求头.请求体等 #2.获取响应内容如果服务器能正常响应,则会得到一个Response,Response包