python爬虫学习34
python爬虫学习34
今天呢就进入到爬虫网页数据解析提取的最后一个小节,与大家一同学习parsel库的使用,由于博主本身对Web编程不甚了解,所以CSS选择就浅显的了解了一下,pyquery库大家感兴趣就自己学习吧。
九、parsel 库的使用其一
前几节我们共同学习了Xpath语言,一同了解了lxml与beautiful soup库的基本用法。现在不管是使用Xpath还是CSS选择器,我们都已经能够处理绝大多数的内容提取工作了。
在使用方法时,有时使用Xpath会更简单,有时使用CSS会更加方便,那么这个时候我们希望将两者结合起来,parsel库就是一个不错的选择。
9-1、parsel 库的下载
parsel这个库可以解析HTML与XML,并支持Xpath与CSS选择器对内容的提取和修改,同时也支持正则表达式的提取功能。parsel是Python最流行的爬虫框架scrapy的底层支持。
下载安装库
pip install parsel
9-2、初始化
通常我们需要使用selector类声明一个selector对象,对一段待处理的html文本进行初始化:
from parsel import selector
html = """
<div class="nav">
<div class="nav-head">
<h4>hello<h4>
</div>
<ul>
<li><a href="https://www.qbiqu.com/">首页</a></li>
<li><a href="https://blog.csdn.net/modules/article/bookcase.php">我的书架</a></li>
<li><a href="https://blog.csdn.net/xuanhuanxiaoshuo/">玄幻小说</a></li>
<li><a href="https://blog.csdn.net/xiuzhenxiaoshuo/">修真小说</a></li>
<li><a href="https://blog.csdn.net/dushixiaoshuo/">都市小说</a></li>
<li><a href="https://blog.csdn.net/chuanyuexiaoshuo/">穿越小说</a></li>
<li><a href="https://blog.csdn.net/wangyouxiaoshuo/">网游小说</a></li>
<li><a href="https://blog.csdn.net/kehuanxiaoshuo/">科幻小说</a></li>
<li><a href="https://blog.csdn.net/paihangbang/">排行榜单</a></li>
<li><a href="https://blog.csdn.net/wanben/1_1">完本小说</a></li>
<li><a href="https://blog.csdn.net/xiaoshuodaquan/">全部小说</a></li>
<li><script type="text/javascript">yuedu();</script></li>
</ul>
</div>
<div id="banner" style="display:none"></div>
<div class="dahengfu"><script type="text/javascript">list1();</script></div>
"""
selector = selector.Selector(text=html)
在初始化之后我们就可以使用之前学会的Xpath或caa方法进行选择了:
from parsel import selector
html = """
<div class="nav">
<div class="nav-head">
<h4>hello<h4>
</div>
<ul>
<li><a href="https://www.qbiqu.com/">首页</a></li>
<li><a href="https://blog.csdn.net/modules/article/bookcase.php">我的书架</a></li>
<li><a href="https://blog.csdn.net/xuanhuanxiaoshuo/">玄幻小说</a></li>
<li><a href="https://blog.csdn.net/xiuzhenxiaoshuo/">修真小说</a></li>
<li><a href="https://blog.csdn.net/dushixiaoshuo/">都市小说</a></li>
<li><a href="https://blog.csdn.net/chuanyuexiaoshuo/">穿越小说</a></li>
<li><a href="https://blog.csdn.net/wangyouxiaoshuo/">网游小说</a></li>
<li><a href="https://blog.csdn.net/kehuanxiaoshuo/">科幻小说</a></li>
<li><a href="https://blog.csdn.net/paihangbang/">排行榜单</a></li>
<li><a href="https://blog.csdn.net/wanben/1_1">完本小说</a></li>
<li><a href="https://blog.csdn.net/xiaoshuodaquan/">全部小说</a></li>
<li><script type="text/javascript">yuedu();</script></li>
</ul>
</div>
<div id="banner" style="display:none"></div>
<div class="dahengfu"><script type="text/javascript">list1();</script></div>
"""
ini_sel = selector.Selector(text=html)
item1 = ini_sel.xpath('//li/a[@href = "https://blog.csdn.net/xuanhuanxiaoshuo/"]')
print(item1)
print(type(item1)) # 类型为 <class 'parsel.selector.SelectorList'>
print(len(item1)) # 长度为一
item2 = ini_sel.css('.nav-head')
print(item2)
运行结果:
对于Selector对象,这是一个可以迭代的对象,所有节点的代码被存储在该对象的data属性里。
9-3 提取文本
既然Selector对象是一个可迭代的对象,我们就可以使用循环对结果进行遍历:
from parsel import Selector
html = """
<div class="nav">
<div class="nav-head">
<h4>hello<h4>
</div>
<ul>
<li><a href="https://www.qbiqu.com/">首页</a></li>
<li><a href="https://blog.csdn.net/modules/article/bookcase.php">我的书架</a></li>
<li><a href="https://blog.csdn.net/xuanhuanxiaoshuo/">玄幻小说</a></li>
<li><a href="https://blog.csdn.net/xiuzhenxiaoshuo/">修真小说</a></li>
<li><a href="https://blog.csdn.net/dushixiaoshuo/">都市小说</a></li>
<li><a href="https://blog.csdn.net/chuanyuexiaoshuo/">穿越小说</a></li>
<li><a href="https://blog.csdn.net/wangyouxiaoshuo/">网游小说</a></li>
<li><a href="https://blog.csdn.net/kehuanxiaoshuo/">科幻小说</a></li>
<li><a href="https://blog.csdn.net/paihangbang/">排行榜单</a></li>
<li><a href="https://blog.csdn.net/wanben/1_1">完本小说</a></li>
<li><a href="https://blog.csdn.net/xiaoshuodaquan/">全部小说</a></li>
<li><script type="text/javascript">yuedu();</script></li>
</ul>
</div>
<div id="banner" style="display:none"></div>
<div class="dahengfu"><script type="text/javascript">list1();</script></div>
"""
ini_sel = Selector(text=html)
items = ini_sel.xpath('//li')
for i in items:
print(i.get())
运行结果:
遍历时的每一个 i变量的值又是一个selector对象,对于每一个i我们又可以使用css或者Xpath方法进行内容提取。若我们想要获取Selector对象的内容,则要使用该对象提供的get()方法,获取包含在该对象中的内容。
但是对于get方法,它仅能够返回第一个符合条件的结果:
from parsel import Selector
html = """
<div class="nav">
<div class="nav-head">
<h4>hello<h4>
</div>
<ul>
<li><a href="https://www.qbiqu.com/">首页</a></li>
<li><a href="https://blog.csdn.net/modules/article/bookcase.php">我的书架</a></li>
<li><a href="https://blog.csdn.net/xuanhuanxiaoshuo/">玄幻小说</a></li>
<li><a href="https://blog.csdn.net/xiuzhenxiaoshuo/">修真小说</a></li>
<li><a href="https://blog.csdn.net/dushixiaoshuo/">都市小说</a></li>
<li><a href="https://blog.csdn.net/chuanyuexiaoshuo/">穿越小说</a></li>
<li><a href="https://blog.csdn.net/wangyouxiaoshuo/">网游小说</a></li>
<li><a href="https://blog.csdn.net/kehuanxiaoshuo/">科幻小说</a></li>
<li><a href="https://blog.csdn.net/paihangbang/">排行榜单</a></li>
<li><a href="https://blog.csdn.net/wanben/1_1">完本小说</a></li>
<li><a href="https://blog.csdn.net/xiaoshuodaquan/">全部小说</a></li>
<li><script type="text/javascript">yuedu();</script></li>
</ul>
</div>
<div id="banner" style="display:none"></div>
<div class="dahengfu"><script type="text/javascript">list1();</script></div>
"""
ini_sel = Selector(text=html)
item0 = ini_sel.xpath('//a')
print(item0.get())
运行结果:凭借之前的知识我们很容易知道item0中的内容不止一项,但是get方法只返回了一项:
若要返回所有结果:使用getall()方法
from parsel import Selector
html = """
<div class="nav">
<div class="nav-head">
<h4>hello<h4>
</div>
<ul>
<li><a href="https://www.qbiqu.com/">首页</a></li>
<li><a href="https://blog.csdn.net/modules/article/bookcase.php">我的书架</a></li>
<li><a href="https://blog.csdn.net/xuanhuanxiaoshuo/">玄幻小说</a></li>
<li><a href="https://blog.csdn.net/xiuzhenxiaoshuo/">修真小说</a></li>
<li><a href="https://blog.csdn.net/dushixiaoshuo/">都市小说</a></li>
<li><a href="https://blog.csdn.net/chuanyuexiaoshuo/">穿越小说</a></li>
<li><a href="https://blog.csdn.net/wangyouxiaoshuo/">网游小说</a></li>
<li><a href="https://blog.csdn.net/kehuanxiaoshuo/">科幻小说</a></li>
<li><a href="https://blog.csdn.net/paihangbang/">排行榜单</a></li>
<li><a href="https://blog.csdn.net/wanben/1_1">完本小说</a></li>
<li><a href="https://blog.csdn.net/xiaoshuodaquan/">全部小说</a></li>
<li><script type="text/javascript">yuedu();</script></li>
</ul>
</div>
<div id="banner" style="display:none"></div>
<div class="dahengfu"><script type="text/javascript">list1();</script></div>
"""
ini_sel = Selector(text=html)
item0 = ini_sel.xpath('//a')
print(item0.getall())
运行结果:所有结果放到了到一个列表中
今日结束,明日继续!
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhhacekh
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13