小白对python中网页解析库pyquery的理解

终于又开始写一些基本的东西,借博客来记录一下自己的学习过程

在不断深入研究python爬虫后,学到了越来越多的东西,对于爬虫解析网页的多种方法也有了一定的理解,之前讲过beautifulsoup的一些用法,但没有详细的介绍,在我个人的经验总结后,我觉得要学好beautifulsoup,首先对python字典要有一定的理解。
今天要给大家讲的是pyquery这个第三方库,下载方式特别简单,就是命令窗口输入:pip install pyquery即可。
首先,在使用这个库对网页进行解析时,我们先明白#和.在这个库中的意义。
#代表定位id而.则代表定位class。
我们以这个网站https://www.duanwenxue.com为例子讲解,这是一个短文网站,我们打开f12,可以看到在body这个标签内有id标签的出现
在这里插入图片描述
我们用requests库访问该网页,用以下代码处理:

import requests
from pyquery import PyQuery as pq
url = 'https://www.duanwenxue.com'
r = requests.get(url)
html = r.text
doc = pq(html)
toolbar = doc('#toolbar')
print(toolbar)

我们将导入的第三方库的名字简写为pq,方便下面的书写,然后我们将得到的html文本转换成pyquery类型,接着利用#定位id为toolbar的区域。运行之后结果

<div id="toolbar">&#13;
  <div class="tool">&#13;
    <div class="tool-left">&#13;
    <div class="sj_app" id="sj_app" onmouseover="$(this).find('.ewm').show();" onmouseout="$(this).find('.ewm').hide();">&#13;
        <i class="qr_code"></i>安卓下载<i class="arrow"></i>&#13;
        <div class="ewm up"> &#13;
            <p>扫一扫短文学APP<a href="/app_down.html">点击进行APP下载</a></p>&#13;
			<div class="android"></div>&#13;
            <div class="clear"></div>&#13;
        </div>&#13;
    </div>&#13;
    <div class="sj_app" id="sj_app" onmouseover="$(this).find('.ewm').show();" onmouseout="$(this).find('.ewm').hide();">&#13;
        <i class="qr_code"></i>IOS下载<i class="arrow"></i>&#13;
        <div class="ewm up"> &#13;
            <p>扫一扫短文学APP<a href="/app_down.html">点击进行APP下载</a></p>&#13;
			<div class="ios"></div>&#13;
            <div class="clear"></div>&#13;
        </div>&#13;
    </div>&#13;
     <a href="https://m.duanwenxue.com">手机访问</a> <a href="/data/sitemap.html">MAP</a> <a href="/tags.html">TAG</a> <a href="/data/rssmap.html">RSS</a> </div>&#13;
    <div class="tool-right" id="tool-right"> 欢迎访问短文学 您还没有 <a href="/member/login.php" onclick="openAjaxLoginDiv('ajaxlogincommon');return false;">[ 登录 ]</a> <a href="/member/reg_new.php">[ 注册 ]</a></div>&#13;
  </div>&#13;
</div>&#13;

与原始网页源代码进行对比,发现就是我们所定位的标签内所有内容。
接着我们再写关于.的应用程序,还是以该网页为例

import requests
from pyquery import PyQuery as pq

url = 'https://www.duanwenxue.com'
r = requests.get(url)
html = r.text
doc = pq(html)
href = doc('.subnav a')
for href in href:
    print(url + pq(href).attr('href'))

也就是定位class= “subnav”所在的标签,也包括它的子标签。这里我定位的是这个
在这里插入图片描述
因为我要获取子链接,如果只输入href = doc('.subnav')而没有‘ ’+a的话,会得到

<div class="subnav">&#13;
	<ul>&#13;
		<li class="thiscase"><a href="/sanwen/suibi/">散文随笔</a></li>&#13;
		<li><a href="/qinggan/meiwen/">美文欣赏</a></li>&#13;
		<li><a href="/shanggan/ganrengushi/">感人故事</a></li>&#13;
		<li><a href="/qinggan/aiqing/">爱情文章</a></li>&#13;
		<li><a href="/diary/suibi/">心情随笔</a></li>&#13;
		<li><a href="/sanwen/shuqing/">抒情散文</a></li>&#13;
		<li><a href="/shige/">诗歌大全</a></li>&#13;
		<li><a href="/shige/aiqingshiju/">爱情诗句</a></li>&#13;
		<li><a href="/rizhi/shangganwenzi/">伤感文字</a></li>&#13;
		<li><a href="/jingdian/ganwu/">人生感悟</a></li>&#13;
		<li><a href="/jingdian/zheli/">人生哲理</a></li>&#13;
		<li class="thiscase"><a href="/yuju/yulu/">经典语录</a></li>&#13;
		<li><a href="/yuju/weimei/">唯美句子</a></li>&#13;
		<li><a href="/jingdian/lizhi/">励志文章</a></li>&#13;
		<li><a href="/jingdian/shenghuo/">生活随笔</a></li>&#13;
		<li><a href="/yulu/aiqing/">爱情语录</a></li>&#13;
		<li><a href="/jingdian/gushi/">故事会</a></li>&#13;
		<li><a href="/yuju/shangxin/">伤心的句子</a></li>&#13;
		<li><a href="/huayu/ganren/">感人的话</a></li>&#13;
		<li><a href="/huayu/biaobai/">表白的话</a></li>&#13;
		<li><a href="/huayu/">经典话语</a></li>&#13;
		<li><a href="/juzi/">句子大全</a></li>&#13;
	</ul>&#13;
</div>

这样的结果,显然有点乱,于是我再加上一个a标签:

href = doc('.subnav a')

运行之后就是一串整齐的字符,其中每个属性间用空格隔开。

<a href="/sanwen/suibi/">散文随笔</a><a href="/qinggan/meiwen/">美文欣赏</a><a href="/shanggan/ganrengushi/">感人故事</a><a href="/qinggan/aiqing/">爱情文章</a><a href="/diary/suibi/">心情随笔</a><a href="/sanwen/shuqing/">抒情散文</a><a href="/shige/">诗歌大全</a><a href="/shige/aiqingshiju/">爱情诗句</a><a href="/rizhi/shangganwenzi/">伤感文字</a><a href="/jingdian/ganwu/">人生感悟</a><a href="/jingdian/zheli/">人生哲理</a><a href="/yuju/yulu/">经典语录</a><a href="/yuju/weimei/">唯美句子</a><a href="/jingdian/lizhi/">励志文章</a><a href="/jingdian/shenghuo/">生活随笔</a><a href="/yulu/aiqing/">爱情语录</a><a href="/jingdian/gushi/">故事会</a><a href="/yuju/shangxin/">伤心的句子</a><a href="/huayu/ganren/">感人的话</a><a href="/huayu/biaobai/">表白的话</a><a href="/huayu/">经典话语</a><a href="/juzi/">句子大全</a>

这就是加a的结果,显然我们还需要提取里面的‘href’属性,我们对结果进行循环处理,然后得到一组编码,我们再用pyquery进行转换,然后用.attr获取你要的属性值,完整代码上面已经给出,再与总的url进行拼接,最后结果

https://www.duanwenxue.com/sanwen/suibi/
https://www.duanwenxue.com/qinggan/meiwen/
https://www.duanwenxue.com/shanggan/ganrengushi/
https://www.duanwenxue.com/qinggan/aiqing/
https://www.duanwenxue.com/diary/suibi/
https://www.duanwenxue.com/sanwen/shuqing/
https://www.duanwenxue.com/shige/
https://www.duanwenxue.com/shige/aiqingshiju/
https://www.duanwenxue.com/rizhi/shangganwenzi/
https://www.duanwenxue.com/jingdian/ganwu/
https://www.duanwenxue.com/jingdian/zheli/
https://www.duanwenxue.com/yuju/yulu/
https://www.duanwenxue.com/yuju/weimei/
https://www.duanwenxue.com/jingdian/lizhi/
https://www.duanwenxue.com/jingdian/shenghuo/
https://www.duanwenxue.com/yulu/aiqing/
https://www.duanwenxue.com/jingdian/gushi/
https://www.duanwenxue.com/yuju/shangxin/
https://www.duanwenxue.com/huayu/ganren/
https://www.duanwenxue.com/huayu/biaobai/
https://www.duanwenxue.com/huayu/
https://www.duanwenxue.com/juzi/

因为该博客只是为了记录知识,免得将来忘了没地方找,所以可能不是很详细。如果有人有问题的话可以评论,我尽最大能力把你解答。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值