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的用法。我相信各位因该有感触。

  1. 笼统。find是对所有的子孙查找。目标太大,及时加了限定也很飘。
  2. 局限。返回的要么是一个,要么可能太多。
  3. 步长短。为了精确可能需要一步步逼近。然后写的老长。可能还要分类讨论。。。

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)
作    者:圣骑士的传说
作    者:圣骑士的传说

我们可以看到效果一致,并且更加的精简了。

注意:

  1. 空格代表递进关系
  2. [0],select返回值是一个列表所以不能直接string。不是解析字符串。
  3. 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选择器相关推荐

  1. 【网络爬虫入门04】彻底掌握BeautifulSoup的CSS选择器

    [网络爬虫入门04]彻底掌握BeautifulSoup的CSS选择器 广东职业技术学院  欧浩源 2017-10-21 1.引言 目前,除了官方文档之外,市面上及网络详细介绍BeautifulSoup ...

  2. 爬虫利器BeautifulSoup之CSS选择器的基本使用

    1.Beautiful Soup简介 Beautiful Soup提供一些简单的.python式的函数用来处理导航.搜索.修改分析树等功能.它是一个工具箱,通过解析文档为用户提供需要抓取的数据,因为简 ...

  3. Python中用Requests爬取名人名言网信息——基于BeautifulSoup和CSS选择器

    效果预览 代码实现 也可用Scrapy框架实现,通过此代码可比较BeautifulSoup中CSS选择器和Scrapy中内置CSS选择器和Xpath用法的差别.Scrapy实现代码链接:https:/ ...

  4. python爬虫实例-记录一次简单的Python爬虫实例

    本次的这篇文章主要是和大家分享了一篇关于记录一次简单的Python爬虫实例 ,有需要的小伙伴可以看一下. 主要流程分为: 爬取.整理.存储 1.其中用到几个包,包括 requests 用于向网站发送请 ...

  5. python爬虫进阶案例,Python进阶(二十)-Python爬虫实例讲解

    #Python进阶(二十)-Python爬虫实例讲解 本篇博文主要讲解Python爬虫实例,重点包括爬虫技术架构,组成爬虫的关键模块:URL管理器.HTML下载器和HTML解析器. ##爬虫简单架构 ...

  6. python爬虫实例之——多线程爬取小说

    之前写过一篇爬取小说的博客,但是单线程爬取速度太慢了,之前爬取一部小说花了700多秒,1秒两章的速度有点让人难以接受. 所以弄了个多线程的爬虫. 这次的思路和之前的不一样,之前是一章一章的爬,每爬一章 ...

  7. python爬虫实例——某二手车数据爬取

    某二手车网站数据爬取 要求: 找到所要爬取的网站网址(url): 今天案例的网址(url):https://www.guazi.com/gy/dazhong/o1/#bread. 观察网站,点开检查, ...

  8. Python爬虫实例-爬取豆瓣电影Top250

    这是本人Python爬虫实例的第二个实例,不过想来好像没有很大的难度所以适合当做新手入门的第一个爬虫.放在这里供大家参考. 本次实例爬取的网站为豆瓣电影Top250,使用到的第三方库有urllib,B ...

  9. python爬虫实例之小说爬取器

    今天和大家分享一个爬取盗版小说的实例. 如今的网络小说可谓是百家齐放各领风骚,玄幻科幻穿越修仙都市- 各种套路看得我是心潮澎湃,笔者曾经也蛮喜欢看小说的,以前经常是拿着一台诺基亚看到深夜,第二天带着黑 ...

最新文章

  1. 2018年英语计算机职称考试,2018年职称计算机考试报考指南大全
  2. phar.php error 139,composer.phar 安装出现PHP Fatal error解决办法
  3. RMAN异机复制数据库(不同路径)
  4. Protues 8.6 详细安装步骤
  5. mysql中int型的zerofill参数
  6. 2019年3月前端面试题
  7. 使用AspectCore动态代理
  8. 【24万欧】国外人工智能计算机博士自述面试经历
  9. java volatile 基本类型_Java中Volatile关键字详解(转)
  10. 蔡司数码视疲劳测试软件_居家办公期间,频繁使用电子数码产品小心患上这种眼病...
  11. WinAPI: GetCursorPos - 获取鼠标指针的当前位置
  12. await 单步调试 c#_GDB调试指南-单步调试
  13. 小米怎么设置语音识别权限 | 手游网游页游攻略大全
  14. java环境一键配置下载地址_java环境一键配置-java环境一键配置下载 v1.0免费版-下载啦...
  15. Bullzip PDF Printer 打印机驱动安装失败解决
  16. vncview用法_vnc远程桌面怎么使用(最新vncviewer使用教程)
  17. MATLAB输出白色背景图片
  18. Android开机速度优化
  19. Flask Template ( 模板学习)
  20. 自然语言处理 第二期

热门文章

  1. 【冰糖R语言】(串列)对象不能强制改变成‘double‘种类
  2. 大漠老师:2022 年的 CSS,到底有哪些特性
  3. JAVA 中的 反射
  4. JDK安装和环境变量配置(Win10图文详解)
  5. TabLayout使用介绍
  6. S9赛季:盗贼竞技场\插旗中技巧攻…
  7. PHP使用web3还原助记词
  8. isdisposed java_Java Shell.isDisposed方法代碼示例
  9. 自动控制原理笔记-根轨迹法
  10. Redis中AKF原则的应用