之前写的一些爬虫都是用的正则、bs4、xpath做为解析库来实现,如果你对web有所涉及,并且比较喜欢css选择器,那么就有一个更适合的解析库—— PyQuery。我们就用一个非常简单的小例子来看看css选择器做爬虫是怎么样的!

安装

直接pip安装即可:pip install pyquery

安装完成后,运行 pip show pyquery,如果出现相关信息即为安装完成!

如果pip安装失败,可以去官网https://pypi.org/project/pyquery/#downloads下载wheel文件,然后用pip安装即可,注意文件名字要写全,比如:pip install pyquery-1.2.17-py2.py3-none-any.whl ,该命令请在同一目录下使用。

使用

确保安装成功后就可以开始使用了,它和其他库一样,PyQuery 初始化的时候也需要传入 HTML 数据源来初始化一个操作对象,它的初始化方式有多种,比如直接传入字符串,传入 URL,传文件名。

我们用requests库搭配来写个简单的抓取凤凰新闻的小爬虫,方便理解:

打开凤凰网——资讯——即时新闻,我们就以抓取这个页面的所有新闻为例吧!

这里没有反爬,页数也不是很多(4页),非常方便用来讲解!分析下网页结构后发现,所有的新闻目录都存在于网页源代码中,每页大概有60多条,我们先来抓取一页的标题和url试试

可以看到,标题和url都在class=newsList的div下的ul->li->a标签下(用a标签的target属性匹配的话太多,不好清洗),我们可以直接写如代码去获取相关内容了,如下图:

前面是常规的requests库获取源代码html,然后用PyQuery解析网页源代码,重点是后面的定位到a标签和取出内容。

doc(‘.newsList ul a’) 的意思是定位class属性为newsList的标签下面的ul下面的a标签,注意newsList前面有个点,代表class属性,ul和a标签之间有个li标签,因为ul下的a标签是唯一,所以省略了(ul标签没有省略是因为最下面翻页部分也在这个div下,省略会有其他内容出现,下面会单独提取)!然后定位到a标签后,用items()方法将所有的a标签取出,然后遍历取出里面的内容。

这里提取标签的内容用了2个方法text()和attr():

text()方法,可以提取出标签下的所有文本内容,注意是所有!!!

attr()方法,取出标签的某属性,2中写法都可以:new.attr.href 和new.attr(‘href’)

然后在看翻页,我们只需要判断是否存在下一页,存在时,查找所有的标题和url,然后获取下一页的url,继续查找,直到不存在下一页,所有的页面就都遍历过了!为了方便,直接做成了一个函数,来看代码

这里同样的用class属性来定位,找到它下的a标签,然后判断‘下一页’是否存在a标签的文本中,存在则取出下一页的url,然后再次调用函数,不存在则退出!

这样,我们就得到了4页所有的title和url的内容,在来看看新闻详情页的情况,所有的网页文本内容都在id=”main_content”的div下的好多p标签中,那么就用到了text()方法了!来看图

这样,我们就取到了所有内容,整合下,最后代码如下:

随手写的代码,就不写入文本或者数据库什么了,主要是学习css选择器的使用!

最后

​到这里PyQuery 的用法就介绍完了,当然只是用到了很少一部分,还有好多功能没有在这里使用,大家有兴趣可以去看看官方文档或者教程,而且css选择器也可以使用在scrapy框架!是非常方便的一种方式!

现在学习python的人越来越多,很多人还在找资料,或者疑问哪本书是否有用,或者想找个可以指导的老师,或者在寻找一起学习的小伙伴,如果你也是需要资料或者需要帮助的话,可以关注我,私信一起来交流学习!

Python学习,还在用正则或者bs4做爬虫吗?来试试css选择器吧相关推荐

  1. 213:Python学习之数据分析篇——Jupyter 引入yfinance做K线股票分析

    引言 注:根据B站视频<8分钟用Python画K线图做股票分析>整理得到 人生苦短,我用Python.学Python一段时间了,但是没做过啥东西,基于市场不好,闲来无事,想使用Python ...

  2. Python 学习第十八天 js 正则及其它前端知识

    一,js 正则表达式 test 判断制度串是否符合规定的正则 (1)定义正则表达式匹配规则         js 中定义正则表达式为rep=/\d+/,两个//之间为正则模式 (2)rep.test( ...

  3. python小甲鱼爬虫妹子_【Python学习日记】B站小甲鱼:爬虫

    Web Spider Python 如何访问互联网 URL + lib -->urllib URL的一般格式为 protocol://hostname[:port] / /path /[;par ...

  4. Python学习 Day43 数据解析-BeautifulSoup 07

    BeautifulSoup 解析数据 一.BeautifulSoup概述 1.BeautifulSoup 是一个可以从HTML或XML文档中提取数据的Python库 功能简单强大.容错能力高.文档相对 ...

  5. 优秀Python学习资源收集汇总(强烈推荐)

    Python是一种面向对象.直译式计算机程序设计语言.它的语法简捷和清晰,尽量使用无异义的英语单词,与其它大多数程序设计语言使用大括号不一样,它使用縮进来定义语句块.与Scheme.Ruby.Perl ...

  6. [转]优秀Python学习资源收集汇总

    Python是一种面向对象.直译式计算机程序设计语言.它的语法简捷和清晰,尽量使用无异义的英语单词,与其它大多数程序设计语言使用大括号不一样,它使用縮进来定义语句块.与Scheme.Ruby.Perl ...

  7. python学习: 优秀Python学习资源收集汇总--转

    Python是一种面向对象.直译式计算机程序设计语言.它的语法简捷和清晰,尽量使用无异义的英语单词,与其它大多数程序设计语言使用大括号不一样,它使用縮进来定义语句块.与Scheme.Ruby.Perl ...

  8. python 学习资源收集汇总

    2019独角兽企业重金招聘Python工程师标准>>> Python是一种面向对象.直译式计算机程序设计语言.它的语法简捷和清晰,尽量使用无异义的英语单词,与其它大多数程序设计语言使 ...

  9. 优秀Python学习资源收集汇总

    转载自:http://blog.sina.com.cn/s/blog_990865340101glbu.html Python是一种面向对象.直译式计算机程序设计语言.它的语法简捷和清晰,尽量使用无异 ...

最新文章

  1. 面向Mobile device的CNN模型手工设计与NAS分析总结,MobileNet V1,V2,V3,Efficient,MNasNet以及Efficient network design
  2. SAP QM 物料主数据检验类型上的Skips allowed
  3. 【FPGA】FPGA中的缓冲与驱动那些事
  4. 对于生活服务小公司网站的看法
  5. python 井字游戏
  6. QT的QMultiSampleAntiAliasing类的使用
  7. 算法六之直接插入排序
  8. java threadlocal 缺点_Java的ThreadLocal如何在后台实现?
  9. jdk1.7 String switch的实现
  10. 《深入浅出DPDK》读书笔记(一):基础部分知识点
  11. 整理下常用到的css属性
  12. StaMPS 在 SBAS 第一步报错 unable to read file ‘../slcosfactor.1.in‘ no such file or directory
  13. 台式电脑锁定计算机,电脑锁住了怎么解锁
  14. Opencv打开basler相机——实现显示视频、保存图片、记录视频(Windows下)
  15. 智慧遂川城管建设项目-容灾备份一体机
  16. 年轻人逃离一线城市:外地人生存环境愈发严峻
  17. kettle MongoDB数据迁移至Hbase
  18. ULONG_PTR的作用
  19. 红蓝对抗-红蓝对抗经验总结
  20. mysql _外键、实体关系与ER图

热门文章

  1. FPGA开发之问题二
  2. Jtest的简单使用
  3. 小米手环深圳通服务器维护,在知网上怎么发表论文_论文如何上传知网
  4. js版计算连续12个月计算不超3万公里
  5. Spring 和 Quartz 实现定时任务
  6. vs2010串口开发(mscomm控件)_未在此计算机上注册ActiveX控件
  7. 【动画宣传片视频制作软件】Focusky教程 | 添加*flv或*.mp4视频背景
  8. C++ Primer Plus学习笔记之函数探幽
  9. csm_eigen安装
  10. 2012年12月第五个周末