PyQuery解析网页用法入门讲解

1. Pyquery的安装

在使用pyquery解析库之前,首先简单介绍一下pyquery然后讲解如何安装pyquery库。

  • pyquery的基础概念

Pyquery也是一个功能很强大的网页解析库,它支持对xml、html文档进行jQuery查询。

  • 安装pyquery

pyquery的安装其实很简单,下面介绍两种不同的安装方式(适用不同的操作系统)。

 
 
 
 
  1. #方式一:pip安装 pip install pyquery    
  2.  
  3. #方式二:wheel安装  
  4. #下载对应系统版本的wheel文件:http://www.lfd.uci.edu/~gohlke/pythonlibs/  
  5. pip install pyquery-1.4.3-py3-non-any.whl 

方式一:安装比较简单,通过pip install pyquery命令就可以直接安装;

方式二:首先需要下载whl文件,然后再去安装。

其下载链接为:http://www.lfd.uci.edu/~gohlke/pythonlibs/#lxml。

进入这个链接后找到pyquery-1.4.3-py3-none-any.whl,并将其下载到本地。

2. Pyquery的使用方法

通过上述方法安装好pyquery之后,我们开始导入pyquery,并通过一个例子去了解pyquery的基本使用方法。首先构造了一段html源码,然后初始化为pyquery对象。

完整代码如下:

 
 
 
 
  1. from pyquery import PyQuery as pq 
  2. html = ''' 
  3.  
  4.     
       
    •         
    • 第1个
    •  
    •         
    • 第2个
    •  
    •         第3个
    •  
    •         第4个
    •  
    •         
    • 第5个
    •  
    •     
     
 
  • ''' 
  • py= pq(html) 
  • 目标:比如我们需要获取html中的li标签

     
     
     
     
    1. #方式一 
    2. print(py('li')) 
    3.  
    4. #方式二 
    5. # 注意下面id 前面需要加上#,class 前面需要加上. 
    6. print(py('#container .list li')) 

    这里有两种获取方式,第一种比较简单,第二种方法定位更加准确。针对上述的html源码,这两种方式获取的结果是一样的,其结果如下:

     
     
     
     
    1. 第1个
    2.  
    3. 第2个
    4.  
    5. 第3个
    6.  
    7. 第4个
    8.  
    9. 第5个
    10.  

    目标:获取class为list的ul标签下的所有子标签(li标签),其代码如下:

     
     
     
     
    1. items = py('.list') 
    2. lis = items.children() 
    3. print(lis) 

    最后打印输出的结果同上,都是把所有的li标签打印输出。

    目标:获取class为list的ul标签的上一级标签(div标签),其代码如下:

     
     
     
     
    1. items = py('.list') 
    2. pa = items.parent() 
    3. print(pa) 

    打印输出结果:

     
     
     
     
    1.  
    2.     
         
      •         
      • 第1个
      •  
      •         
      • 第2个
      •  
      •         第3个
      •  
      •         第4个
      •  
      •         
      • 第5个
      •  
      •     
       
     

    目标:获取class为i0 active的a标签元素,并提取出a标签元素的相关信息

     
     
     
     
    1. a = py('.i0.active a') 
    2. # 标签内容 
    3. print(a) 
    4. # 获取属性(两种方式) 
    5. print(a.attr.href) 
    6. print(a.attr('href')) 
    7. # 获取文本 
    8. print(a.text()) 
    9. # 获取标签里的源码 
    10. print(a.html()) 

    结果:

     
     
     
     
    1. 第3个 
    2. link3.html 
    3. link3.html 
    4. 第3个 
    5. 第3个 

    3. 实战:抓取由关键字搜索的结果

    内容:抓取小说网站由关键字搜索的结果,并采集结果中小说的书名和链接

    思路:首先在小说网站里面搜索关键字:斗罗,然后利用爬虫抓取搜索返回的结果中小说的书名和链接,这过程中通过pyquery去解析网页源码,最后提取出数据。

    链接:http://book.chenlove.cn/search.html?keyword=斗罗

    在浏览器中访问链接:

    在编写之前先分析一下网页源码:

    查看源代码,可以知道每一本书的数据都在class为bigpic-book-name的a标签中,首先使用pyquery去解析其a标签,然后进行循环遍历。

    完整代码如下:

     
     
     
     
    1. from pyquery import PyQuery as pq 
    2. import requests 
    3. # 设置代理服务器 
    4. headers = { 
    5.     'User_Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36' 
    6. #请求连接 
    7. url = "http://book.chenlove.cn/search.html?keyword=斗罗" 
    8. response = requests.get(url, headers=headers) 
    9. if response.status_code == 200: 
    10.     # 转化为utf-8格式,不加这条语句,输出爬取的信息为乱码 
    11.     response.encoding = 'utf8' 
    12.     # 把网页解析为pyquery对象 
    13.     py = pq(response.text) 
    14.     a_list = py('.bigpic-book-name').items() 
    15.     for i in a_list: 
    16.         # 获取书名 
    17.         print(i.text()) 
    18.         # 获取书名链接 
    19.         print(i.attr('href')) 

    上一小节我们学会了如何去提取a标签中的内容和链接,同样的这里一样使用text()和attr()去解析内容和链接。

    结果:

     
     
     
     
    1. 智行斗罗 
    2. /novel/235.html 
    3. 从炸掉魂环开始的斗罗 
    4. /novel/219.html 
    5. 旅途从斗罗开始 
    6. /novel/195.html 
    7. 斗罗之卡BUG 
    8. /novel/159.html 
    9. 终极斗罗 
    10. /novel/54.html 

    本文转载自微信公众号「Python研究者」,可以通过以下二维码关注。转载本文请联系Python研究者公众号。

    网站栏目:PyQuery解析网页用法入门讲解
    URL地址:http://www.shufengxianlan.com/qtweb/news29/467529.html

    网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

    广告

    声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

    猜你还喜欢下面的内容

    手机网站建设知识

    行业网站建设