• 爬虫之PyQuery的base了解


    爬虫之PyQuery的base了解

    • pyquery库是jQuery的Python实现,能够以jQuery的语法来操作解析 HTML 文档,易用性和解析速度都很好,和它差不多的还有BeautifulSoup,都是用来解析的。相比BeautifulSoup完美翔实的文档,虽然PyQuery库的文档弱爆了, 但是使用起来还是可以的,有些地方用起来很方便简洁。

    • 本地文件test.html

      <html lang="en">
      <head>
      	<meta charset="UTF-8" />
      	<title>测试bs4</title>
      </head>
      <body>
      	<div>
      		<p>百里守约</p>
      	</div>
      	<div class="song">
      		<p>李清照</p>
      		<p>王安石</p>
      		<p>苏轼</p>
      		<p>柳宗元</p>
      		<a href="http://www.song.com/" title="赵匡胤" target="_self">
      			<span>this is span</span>
      		宋朝是最强大的王朝,不是军队的强大,而是经济很强大,国民都很有钱</a>
      		<a href="" class="du">总为浮云能蔽日,长安不见使人愁</a>
      		<img src="http://www.baidu.com/meinv.jpg" alt="" />
      	</div>
      	<div class="tang">
      		<ul>
      			<li><a href="http://www.baidu.com" title="qing">清明时节雨纷纷,路上行人欲断魂,借问酒家何处有,牧童遥指杏花村</a></li>
      			<li><a href="http://www.163.com" title="qin">秦时明月汉时关,万里长征人未还,但使龙城飞将在,不教胡马度阴山</a></li>
      			<li><a href="http://www.126.com" alt="qi">岐王宅里寻常见,崔九堂前几度闻,正是江南好风景,落花时节又逢君</a></li>
      			<li><a href="http://www.sina.com" class="du">杜甫</a></li>
      			<li><a href="http://www.dudu.com" class="du">杜牧</a></li>
      			<li><b>杜小月</b></li>
      			<li><i>度蜜月</i></li>
      			<li><a href="http://www.haha.com" id="feng">凤凰台上凤凰游,凤去台空江自流,吴宫花草埋幽径,晋代衣冠成古丘</a></li>
      		</ul>
      	</div>
      </body>
      </html>
      

    1.打开html本地文件:

    from pyquery import PyQuery as pq
    
    with open('./test.html','r',encoding='utf-8')as f:
        content = f.read()
    
    doc = pq(content)
    print(type(doc))#<class 'pyquery.pyquery.PyQuery'>
    

    2.打开网址

    from pyquery import PyQuery as pq
    doc = pq('https://www.baidu.com',encoding='utf-8')
    print(doc('head'))
    #打印百度的头信息
    

    3.基于CSS选择器查找

    from pyquery import PyQuery as pq
    with open('./test.html','r',encoding='utf-8')as f:
        content = f.read()
    
    doc = pq(content)
    print(doc('.tang ul li'))
    #注意层级关系以空格隔开
    

    4.选择器

    5.查找当前标签的父或子标签

    from pyquery import PyQuery as pq
    html="""
    <div class="tang">
    		<ul>
    			<li class="shi"><a href="http://www.baidu.com" title="qing">清明时节雨纷纷,路上行人欲断魂,借问酒家何处有,牧童遥指杏花村</a></li>
    			<li><a href="http://www.163.com" title="qin">秦时明月汉时关,万里长征人未还,但使龙城飞将在,不教胡马度阴山</a></li>
    			<li><a href="http://www.126.com" alt="qi">岐王宅里寻常见,崔九堂前几度闻,正是江南好风景,落花时节又逢君</a></li>
    			<li><a href="http://www.sina.com" class="du">杜甫</a></li>
    			<li><a href="http://www.dudu.com" class="du">杜牧</a></li>
    			<li><b>杜小月</b></li>
    			<li><i>度蜜月</i></li>
    			<li><a href="http://www.haha.com" id="feng">凤凰台上凤凰游,凤去台空江自流,吴宫花草埋幽径,晋代衣冠成古丘</a></li>
    		</ul>
    	</div>
    
    """
    
    doc = pq(html)
    
    item = doc('div ul')
    # print(item)
    print(item.children())#li签,查找父标签
    print(item.parent())#div签,查找子标签
    print(item.children('[class]'))#拿到li签,并且带有class属性
    

    6.获取属性值

    from pyquery import PyQuery as pq
    html="""
    <div class="tang">
    		<ul>
    			<li class="shi"><a href="http://www.baidu.com" title="qing">清明时节雨纷纷,路上行人欲断魂,借问酒家何处有,牧童遥指杏花村</a></li>
    			<li><a href="http://www.163.com" title="qin">秦时明月汉时关,万里长征人未还,但使龙城飞将在,不教胡马度阴山</a></li>
    			<li><a href="http://www.126.com" alt="qi">岐王宅里寻常见,崔九堂前几度闻,正是江南好风景,落花时节又逢君</a></li>
    			<li><a href="http://www.sina.com" class="du">杜甫</a></li>
    			<li><a href="http://www.dudu.com" class="du">杜牧</a></li>
    			<li><b>杜小月</b></li>
    			<li><i>度蜜月</i></li>
    			<li><a href="http://www.haha.com" id="feng">凤凰台上凤凰游,凤去台空江自流,吴宫花草埋幽径,晋代衣冠成古丘</a></li>
    		</ul>
    	</div>
    
    """
    
    doc = pq(html)
    
    item = doc('div ul li a')
    print(item.attr('href'))#http://www.baidu.com
    print(item.attr('title'))#qing
    

    7.获取标签的内容

    from pyquery import PyQuery as pq
    
    html="""
    <div class="tang">
    		<ul>
    			<li class="shi"><a href="http://www.baidu.com" title="qing">清明时节雨纷纷,路上行人欲断魂,借问酒家何处有,牧童遥指杏花村</a></li>
    			<li><a href="http://www.163.com" title="qin">秦时明月汉时关,万里长征人未还,但使龙城飞将在,不教胡马度阴山</a></li>
    			<li><a href="http://www.126.com" alt="qi">岐王宅里寻常见,崔九堂前几度闻,正是江南好风景,落花时节又逢君</a></li>
    			<li><a href="http://www.sina.com" class="du">杜甫</a></li>
    			<li><a href="http://www.dudu.com" class="du">杜牧</a></li>
    			<li><b>杜小月</b></li>
    			<li><i>度蜜月</i></li>
    			<li><a href="http://www.haha.com" id="feng">凤凰台上凤凰游,凤去台空江自流,吴宫花草埋幽径,晋代衣冠成古丘</a></li>
    		</ul>
    	</div>
    
    """
    doc = pq(html)
    
    item = doc('a').text()
    print(item)
    #清明时节雨纷纷,路上行人欲断魂,借问酒家何处有,牧童遥指杏花村 秦时明月汉时关,万里长征人未还,但使龙城飞将在,不教胡马度阴山 岐王宅里寻常见,崔九堂前几度闻,正是江南好风景,落花时节又逢君 杜甫 杜牧 凤凰台上凤凰游,凤去台空江自流,吴宫花草埋幽径,晋代衣冠成古丘
    

    8.其他用法

    from pyquery import PyQuery as pq
    
    html="""
    <div class="tang">
    		<ul>
    			<li class="shi"><a href="http://www.baidu.com" title="qing">清明时节雨纷纷,路上行人欲断魂,借问酒家何处有,牧童遥指杏花村</a></li>
    			<li><a href="http://www.163.com" title="qin">秦时明月汉时关,万里长征人未还,但使龙城飞将在,不教胡马度阴山</a></li>
    			<li><a href="http://www.126.com" alt="qi">岐王宅里寻常见,崔九堂前几度闻,正是江南好风景,落花时节又逢君</a></li>
    			<li><a href="http://www.sina.com" class="du">杜甫</a></li>
    			<li><a href="http://www.dudu.com" class="du">杜牧</a></li>
    			<li><b>杜小月</b></li>
    			<li><i>度蜜月</i></li>
    			<li><a href="http://www.haha.com" id="feng">凤凰台上凤凰游,凤去台空江自流,吴宫花草埋幽径,晋代衣冠成古丘</a></li>
    		</ul>
    	</div>
    
    """
    
    doc = pq(html)
    
    item = doc('div ul')
    
    # item = doc('a').text()
    print(item.find('li a'))
    #遍历循环li下的a标签。
    for i in item.find('li a'):
        print(dir(i))
        # print(i.attrib)#{'href': 'http://www.baidu.com', 'title': 'qing'}里面当前a签所有的属性
        print(i.text)#a标签内容
        print(i.tag)# a标签
        print(i.values)#一个绑定对象<bound method _Element.values of <Element a at 0x201328bfcc8>>
    
  • 相关阅读:
    aa
    https php
    字节转换(转载)
    mysql和mariadb中字段拼接类型有两个或多个字段或者一个字段和一个固定字符串拼接
    Qt检测显示器的个数
    QWebEngine自动添加麦克风和摄像头权限
    Qt开启和关闭蓝牙
    cef关闭主窗口并调用CefQuitMessageLoop()后,仍然在后台运行的问题(linux)
    windows安装jq
    Allure2环境准备
  • 原文地址:https://www.cnblogs.com/xujunkai/p/11420345.html
Copyright © 2020-2023  润新知