以前写的一些爬虫都是用的正则、bs四、xpath作为解析库来实现,若是你对web有所涉及,而且比较喜欢css选择器,那么就有一个更适合的解析库—— PyQuery。咱们就用一个很是简单的小例子来看看css选择器作爬虫是怎么样的!css
直接pip安装便可:pip install pyqueryhtml
安装完成后,运行 pip show pyquery,若是出现相关信息即为安装完成!python
若是pip安装失败,能够去官网https://pypi.org/project/pyquery/#downloads下载wheel文件,而后用pip安装便可,注意文件名字要写全,好比:pip install pyquery-1.2.17-py2.py3-none-any.whl ,该命令请在同一目录下使用。web
确保安装成功后就能够开始使用了,它和其余库同样,PyQuery 初始化的时候也须要传入 HTML 数据源来初始化一个操做对象,它的初始化方式有多种,好比直接传入字符串,传入 URL,传文件名。数据库
咱们用requests库搭配来写个简单的抓取凤凰新闻的小爬虫,方便理解:框架
打开凤凰网——资讯——即时新闻,咱们就以抓取这个页面的全部新闻为例吧!scrapy
这里没有反爬,页数也不是不少(4页),很是方便用来说解!分析下网页结构后发现,全部的新闻目录都存在于网页源代码中,每页大概有60多条,咱们先来抓取一页的标题和url试试函数
能够看到,标题和url都在class=newsList的div下的ul->li->a标签下(用a标签的target属性匹配的话太多,很差清洗),咱们能够直接写如代码去获取相关内容了,以下图:学习
前面是常规的requests库获取源代码html,而后用PyQuery解析网页源代码,重点是后面的定位到a标签和取出内容。url
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,继续查找,直到不存在下一页,全部的页面就都遍历过了!为了方便,直接作成了一个函数,来看代码
python直播学习群542110741
这里一样的用class属性来定位,找到它下的a标签,而后判断‘下一页’是否存在a标签的文本中,存在则取出下一页的url,而后再次调用函数,不存在则退出!
这样,咱们就获得了4页全部的title和url的内容,在来看看新闻详情页的状况,全部的网页文本内容都在id="main_content"的div下的好多p标签中,那么就用到了text()方法了!来看图
这样,咱们就取到了全部内容,整合下,最后代码以下:
随手写的代码,就不写入文本或者数据库什么了,主要是学习css选择器的使用!
到这里PyQuery 的用法就介绍完了,固然只是用到了不多一部分,还有好多功能没有在这里使用,你们有兴趣能够去看看官方文档或者教程,并且css选择器也可使用在scrapy框架!是很是方便的一种方式!
如今学习python的人愈来愈多,不少人还在找资料,或者疑问哪本书是否有用,或者想找个能够指导的老师,或者在寻找一块儿学习的小伙伴,若是你也是须要资料或者须要帮助的话,能够关注我,私信一块儿来交流学习!