python爬虫学习35
九、parsel 库的使用 其二
9-4 提取属性
今天接着学习parsel库,昨天我们学习了parsel中的初始化和提取文本,那么如何提取属性呢?
与我们之前学习的一致,直接放到Xpath或CSS中就行了
因为不怎么会CSS所以就主要以Xpath为例子了。。。
from parsel import Selector
html = """
<div class="nav">
<div class="nav-head item">
<h4>hello<h4>
</div>
<ul>
<li><a href="https://www.qbiqu.com/">首页</a></li>
<li><a href="/modules/article/bookcase.php">我的书架</a></li>
<li><a href="/xuanhuanxiaoshuo/">玄幻小说</a></li>
<li><a href="/xiuzhenxiaoshuo/">修真小说</a></li>
<li><a href="/dushixiaoshuo/">都市小说</a></li>
<li><a href="/chuanyuexiaoshuo/">穿越小说</a></li>
<li><a href="/wangyouxiaoshuo/">网游小说</a></li>
<li><a href="/kehuanxiaoshuo/">科幻小说</a></li>
<li><a href="/paihangbang/">排行榜单</a></li>
<li><a href="/wanben/1_1">完本小说</a></li>
<li><a href="/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)
result = ini_sel.xpath('//div[contains(@class, "nav-head")]')
print(result)
print(result.get())
print(result.getall())
运行结果:
9-5正则提取
还记得我们那年一起学过的正则表达式吗?这里也可以用上:
from parsel import Selector
html = """
<div class="nav">
<div class="nav-head item">
<h4>hello<h4>
</div>
<ul>
<li><a href="https://www.qbiqu.com/">首页</a></li>
<li><a href="/modules/article/bookcase.php">我的书架</a></li>
<li><a href="/xuanhuanxiaoshuo/">玄幻小说</a></li>
<li><a href="/xiuzhenxiaoshuo/">修真小说</a></li>
<li><a href="/dushixiaoshuo/">都市小说</a></li>
<li><a href="/chuanyuexiaoshuo/">穿越小说</a></li>
<li><a href="/wangyouxiaoshuo/">网游小说</a></li>
<li><a href="/kehuanxiaoshuo/">科幻小说</a></li>
<li><a href="/paihangbang/">排行榜单</a></li>
<li><a href="/wanben/1_1">完本小说</a></li>
<li><a href="/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)
result = ini_sel.xpath('//a').re('.*?href.*?xiaoshuo.*?/">')
print(result)
运行结果:
也可以使用 re_first 返回第一个符合的结果:
from parsel import Selector
html = """
<div class="nav">
<div class="nav-head item">
<h4>hello<h4>
</div>
<ul>
<li><a href="https://www.qbiqu.com/">首页</a></li>
<li><a href="/modules/article/bookcase.php">我的书架</a></li>
<li><a href="/xuanhuanxiaoshuo/">玄幻小说</a></li>
<li><a href="/xiuzhenxiaoshuo/">修真小说</a></li>
<li><a href="/dushixiaoshuo/">都市小说</a></li>
<li><a href="/chuanyuexiaoshuo/">穿越小说</a></li>
<li><a href="/wangyouxiaoshuo/">网游小说</a></li>
<li><a href="/kehuanxiaoshuo/">科幻小说</a></li>
<li><a href="/paihangbang/">排行榜单</a></li>
<li><a href="/wanben/1_1">完本小说</a></li>
<li><a href="/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)
result = ini_sel.xpath('//a').re_first('href.*?"/(.*?)/">')
print(result)
运行结果:
至此parsel库就已经被我们基本掌握了,实际上它是结合Xpath、CSS选择器和正则表达式的一个题提取库,所以有相关的基础掌握起来就非常快啦!
今日结束,未完待续…