很多读者在学习了Python之后,想做一些爬虫程序,在线采集数据或者完成一些自动化操作。因此,我们也制作了一套爬虫实战课程,目前正在完善中,即将与大家见面。等不及的朋友,可以先看看这个类似bs4-PyQuery的网页分析模块。说到jQuery,熟悉前端的同学一定不陌生。它可以轻松优雅地定位、选择和移动html文件。本文的主角pyquery支持在jquery中对html进行操作。所以非常适合有前端或者js基础的同学。废话不多说,边看文章边打开编辑器,跟着我一探究竟。1、pipinstallpyquery2的安装过程比较简单。入门接下来我们以简书首页文章解析为例,简单梳理一下pyquery的一些功能。(1)导入相关库分别导入网络请求库requests和pyquery。importrequestsimportpyquery(2)导入数据到pyquery和bs4一样,处理一个网页先创建一个pyquery对象。可以通过抓取网页内容来初始化。#请求简书地址url='http://www.jianshu.com/'req=requests.get(url)page=req.text#导入pyquery处理pq=pyquery.PyQuery(page)pyquery也可以直接调用内置网络请求模块从URL初始化:url='http://www.baidu.com'pq=pyquery.PyQuery(urrlurl=url)(3)定位元素pyquery提供了多种定位元素的方法,这里简单介绍一下三种类型,直接定位,id定位,class定位。根据html标签直接定位:#directlylocatetheheadtagpqpq_head=pq('head')上面的代码是获取html中
.......标签中的内容。根据id定位:在简书首页的源码中,可以找到这么一段根据id定位li标签。代码如下:#Positioningthelitagofid=note-11772642pqpq_id=pq('#note-11772642')以上代码得到了id名称为note-11772642的tag,需要注意的是查询的时候id,加上#前缀,这是css选择器的语法。根据class定位:以刚才的例子为例,我们可以根据class=have-img获取这个li标签#定位class=have-img的li标签pqpq_class=pq('.have-img')注意它是在查询类时添加的。前缀,这也是css选择器语法。(4)上一节的index标签有个小问题。我们知道html中只有一个head标签,类名have-img的li标签可能有多个。我们如何遍历所有的li标签呢?标签呢?如何分别取某里?首先,我们可以一个一个遍历#Traverseclass=have-img的所有li标签,使用.ep(index)函数。#获取第一个li标签li_first=pq_class.ep(0)#获取第二个li标签li_second=pq_class.ep(1)(5)找到标签返回刚才的图片在上一步中,我们已经已经找到了所有的li标签,也知道如何索引其中的元素,但是现在我们需要准确定位到某个元素,比如上图中id=note-11772642的li标签。这时候filter(selecter)就派上用场了li_spec=pq_class.filter('#note-11772642')这样我们就可以找到指定的li标签了。需要注意的是,过滤功能只能在同级标签中找到,比如这里只能过滤li标签,而不能定位到li标签下的a标签和div标签。当然,针对这种情况,pyquery为我们提供了另一个函数find(selector),用于查找子节点。继续上图为例,查找具体li标签下的p标签p_tag=li_spec.find('p')(6)提取属性和值上面我们已经讲了很多关于标签的知识,现在我们来说说如何获取标签中的属性和标签包裹的文字。在实际的爬虫项目中,这通常是最重要的一步。例如从a标签获取链接,从li标签或p标签获取文本。获取属性:使用attr()函数,以我们前面获取的li标签为例,获取id属性#获取id属性的方法li_specli_spec_id=li_spec.attr('id')li_specli_spec_id_2=li_spec.attr.idli_specli_spec_id_3=li_spec。attr['id']获取文本:使用text()函数,以我们之前获取的p标签为例,获取其中的文本。string=p_tag.text()至此,这些就是爬虫中会用到的函数。3.总结pyquery也有操作文档树的能力。本文主要介绍爬虫相关的知识,这里不做详细描述。有兴趣的同学移步官方文档:http://pythonhosted.org/pyquery/index.html***,既然我们分析了简书首页,请爬取简书首页所有文章标题和文章链接根据自己所学的简书,然后打印出来,如下图【本文为专栏组织《Crossin的编程课堂》原创文章,转载请微信联系原作者公众号(rossincode)】点此查看该作者更多好文