Python爬虫实例(3)--BeautifulSoup的CSS选择器
Python爬虫实例
紧接着上一讲的内容。
我们初步了解了bs4这个解析库。
但是bs4难道只有find,find_all了吗?
如果层次比较深,相似的元素比较多,和可能会写的比较长。
最主要的是很难搞清逻辑。
所以这一章是bs4的中级部分。
任务:解析修真聊天群的章节标题。
网页数据见上一讲。
本期耗时15min。练习耗时15min。
文章目录
- Python爬虫实例
- 前言
- 一、select选择器
- select函数简介
- CSS语法选择器
- 二、实操
- 目标的确认
- 方案选择
- 干扰信息的排除
- 总结
前言
最开始的工具介绍里提到过BeautifulSoup,lxml包。
在速度上正则表达式和lxml是比较突出的。lxml是基于C语言的,而BeautifulSoup使用Python编写,因此BeautifulSoup在性能上略逊一筹也不奇怪。但BeautifulSoup使用起来更方便一些,且支持CSS选择器,这也能够弥补其性能上的不足。另外最新版的bs4也已经支持lxml作为解析器。使用lxml时程序主要根据XPath来解析,如果熟悉XPath的语法,那么lxml和BeautifulSoup都是很好的选择。
一、select选择器
通过上一节,我们看到find的用法。我相信各位因该有感触。
- 笼统。find是对所有的子孙查找。目标太大,及时加了限定也很飘。
- 局限。返回的要么是一个,要么可能太多。
- 步长短。为了精确可能需要一步步逼近。然后写的老长。可能还要分类讨论。。。
select函数简介
select代表的就是选择器。返回值是一个列表。
status = soup.select('#contentcolumn > div > span:nth-child(4)')
我们提到过一次选择器,就是CSS那一篇文章。
css选择器
select支持CSS语法,其实本来就是受到了CSS的启发。
CSS语法选择器
基本和CSS选择器语法一致。
content = soup.find("div",attrs={"id":"book"}).find("div",attrs={"id":"info"}).find('p').string
content1 = soup.select('div#book div#info p:nth-child(2)')[0].string
print(content)
print(content1)
作 者:圣骑士的传说
作 者:圣骑士的传说
我们可以看到效果一致,并且更加的精简了。
注意:
- 空格代表递进关系
- [0],select返回值是一个列表所以不能直接string。不是解析字符串。
- nth-child(2)代表第二个节点。:nth-child() 选择器,该选择器选取父元素的第 N 个子元素,与类型无关。
所以这里即使是第一个p,但是却是2。
当然也可以选中全部的p出来用列表索引,如下:
content2 = soup.select('div#book div#info p')[0].string
效果是一样的。
二、实操
目标的确认
观察内容,返现基本是一个列表,但是有一些妨碍的序言部分,需要去除。
<dd><a href ="/1_1852/526426166.html">第3167章 哥哥,我们家果然不是普通人对吧?</a></dd><dd><a href ="/1_1852/529533214.html">第3166章 我的妹妹,当你出生的那一天……</a></dd><dd><a href ="/1_1852/530029322.html">第3165章 霸妹变成了面瘫</a></dd><dd><a href ="/1_1852/530224932.html">第3164章 此女类我</a></dd><dd><a href ="/1_1852/530584964.html">完本感言</a></dd><dd><a href ="/1_1852/530590713.html">第3163章 霸宋邀请你加入群‘九洲一号群’【大结局】</a></dd><dd><a href ="/1_1852/530693596.html">今天先一章……明天大结局</a></dd><dt>《修真聊天群》正文卷</dt><dd><a href ="/1_1852/835564.html">第一章 黄山真君和九洲一号群</a></dd><dd><a href ="/1_1852/835565.html">第二章 且待本尊算上一卦</a></dd><dd><a href ="/1_1852/835566.html">第三章 一张丹方</a></dd><dd><a href ="/1_1852/835567.html">第四章 H市三品后天雷劫</a><
方案选择
直接定位dd标签行不行?
不行,列表一个页面可能有很多,干扰元素太多。
定位
<div class="listmain">
行不行,可以,而且距离目标关系不是很远。
干扰信息的排除
我们发现dt标签没有a标签是分割信息。
在两次dt之后才是我们要的dd内容。
raw_titles = soup.select('div.listmain dl dd,dt')
# print(raw_titles)dt_nu = 0 # flag
filter_list = []
for title in raw_titles:if not title.find('a') :print("dt")dt_nu +=1if dt_nu >=2 and title.find('a') :title_str = title.find('a').stringfilter_list.append(title_str)print(dt_nu)
print(filter_list)
with open("sector.txt","w",encoding='utf-8') as SEC:for title in filter_list:if title:# 过滤空值SEC.write(title+"\n")
结果自然是很完美啦!!!
select返回的基础的类型是和find,find_all一致的。所以两种方法可以相互嵌套。
总结
这一章,我们讲解了更为简单的定位工具。
CSS选择器select。更多的参数需要具体查看使用说明。
并且在不同的实例下联系。
在实战中很少用到find,所以忘记也无所谓。。。可能也就如上的if里面用的到。
下一讲我们介绍另一个规则工具,xpath。
虽然形式上相差比较多,但是定位用的锚点无非就那么几个。
标签,id,属性,类。
需要的是,灵活的运用。
一键三连吧,朋友们。。。
Python爬虫实例(3)--BeautifulSoup的CSS选择器相关推荐
- 【网络爬虫入门04】彻底掌握BeautifulSoup的CSS选择器
[网络爬虫入门04]彻底掌握BeautifulSoup的CSS选择器 广东职业技术学院 欧浩源 2017-10-21 1.引言 目前,除了官方文档之外,市面上及网络详细介绍BeautifulSoup ...
- 爬虫利器BeautifulSoup之CSS选择器的基本使用
1.Beautiful Soup简介 Beautiful Soup提供一些简单的.python式的函数用来处理导航.搜索.修改分析树等功能.它是一个工具箱,通过解析文档为用户提供需要抓取的数据,因为简 ...
- Python中用Requests爬取名人名言网信息——基于BeautifulSoup和CSS选择器
效果预览 代码实现 也可用Scrapy框架实现,通过此代码可比较BeautifulSoup中CSS选择器和Scrapy中内置CSS选择器和Xpath用法的差别.Scrapy实现代码链接:https:/ ...
- python爬虫实例-记录一次简单的Python爬虫实例
本次的这篇文章主要是和大家分享了一篇关于记录一次简单的Python爬虫实例 ,有需要的小伙伴可以看一下. 主要流程分为: 爬取.整理.存储 1.其中用到几个包,包括 requests 用于向网站发送请 ...
- python爬虫进阶案例,Python进阶(二十)-Python爬虫实例讲解
#Python进阶(二十)-Python爬虫实例讲解 本篇博文主要讲解Python爬虫实例,重点包括爬虫技术架构,组成爬虫的关键模块:URL管理器.HTML下载器和HTML解析器. ##爬虫简单架构 ...
- python爬虫实例之——多线程爬取小说
之前写过一篇爬取小说的博客,但是单线程爬取速度太慢了,之前爬取一部小说花了700多秒,1秒两章的速度有点让人难以接受. 所以弄了个多线程的爬虫. 这次的思路和之前的不一样,之前是一章一章的爬,每爬一章 ...
- python爬虫实例——某二手车数据爬取
某二手车网站数据爬取 要求: 找到所要爬取的网站网址(url): 今天案例的网址(url):https://www.guazi.com/gy/dazhong/o1/#bread. 观察网站,点开检查, ...
- Python爬虫实例-爬取豆瓣电影Top250
这是本人Python爬虫实例的第二个实例,不过想来好像没有很大的难度所以适合当做新手入门的第一个爬虫.放在这里供大家参考. 本次实例爬取的网站为豆瓣电影Top250,使用到的第三方库有urllib,B ...
- python爬虫实例之小说爬取器
今天和大家分享一个爬取盗版小说的实例. 如今的网络小说可谓是百家齐放各领风骚,玄幻科幻穿越修仙都市- 各种套路看得我是心潮澎湃,笔者曾经也蛮喜欢看小说的,以前经常是拿着一台诺基亚看到深夜,第二天带着黑 ...
最新文章
- 2018年英语计算机职称考试,2018年职称计算机考试报考指南大全
- phar.php error 139,composer.phar 安装出现PHP Fatal error解决办法
- RMAN异机复制数据库(不同路径)
- Protues 8.6 详细安装步骤
- mysql中int型的zerofill参数
- 2019年3月前端面试题
- 使用AspectCore动态代理
- 【24万欧】国外人工智能计算机博士自述面试经历
- java volatile 基本类型_Java中Volatile关键字详解(转)
- 蔡司数码视疲劳测试软件_居家办公期间,频繁使用电子数码产品小心患上这种眼病...
- WinAPI: GetCursorPos - 获取鼠标指针的当前位置
- await 单步调试 c#_GDB调试指南-单步调试
- 小米怎么设置语音识别权限 | 手游网游页游攻略大全
- java环境一键配置下载地址_java环境一键配置-java环境一键配置下载 v1.0免费版-下载啦...
- Bullzip PDF Printer 打印机驱动安装失败解决
- vncview用法_vnc远程桌面怎么使用(最新vncviewer使用教程)
- MATLAB输出白色背景图片
- Android开机速度优化
- Flask Template ( 模板学习)
- 自然语言处理 第二期