一个简单的爬虫程序主要分为两个部分,请求部分和解析部分。请求部分基本一行代码就可以搞定,所以主要来讲述一下解析部分。对于解析,最常用的就是xpath和css选择器,偶尔也会使用正则表达式。
不论是xpah还是css,都是通过html元素或者其中某些属性来选中符合条件的元素节点。
以斗罗大陆的部分html为例。
css选择器很多学习过前端的小伙伴对css选择器比较熟悉,.是class选择器,#是id选择器。这里挑最几个常用的来讲一下,其他用法可百度。
常见语法以上就是一些比较常用的css选择器。其中里面的元素a和span只用来举例,可以替换成任意的html元素,href属性也可以替换成元素的其他属性。
样例说明还是用之前斗罗大陆的程序来说明一下。
soup.select()根据css规则选择元素,返回包含一个或多个元素的list。
因为html中class=”type_txt”的span元素有五个,所以返回了五个元素的列表。遍历列表,每个元素可以通过string属性,来输出元素中间的文本内容;每个元素通过attrs属性,可以获取标签的属性,返回一个字典。
小技巧如果你要问,不会css选择器能不能写爬虫啊,我肯定不会回答我帮你写啊,我只能告诉你可以!!
复制的css选择器如下:
bodydiv:nth-child(3)div.site_container.container_detail_topdivdivdivdiv:nth-child(3)div:nth-child(1)span.type_txt
我们用这个测试一下:
虽然看起来比较长,但还是正确地选择到了span元素。
xpathxpah全名XmlPathLanguage(xml路径语言),说实话,我没用过xpath,现学现卖。
如图是比较常见的xpath语法,我从参考文档、使用测试到整理成表格一共用了半个多小时。从节点选择路径来说,一般相对路径用的比较多。元素后面[]里面的内容就是if条件。
同时,css选择器无法选择元素的父元素,而xpath可以通过../来选择元素的父元素。
样例说明查看这些变量的值:这些变量的类型也是list,也需要用下标或者遍历来取出里面的值。
小技巧和css一样,不过选择的是CopyXpath。
复制的xpath:
/html/body/div[2]/div[1]/div/div/div/div[3]/div[1]/span[2]测试结果:不过要注意的是,xpath一定要对起始点元素做好选择。上面三个不一样的xpath输出了同样的结果,起始点元素的选择决定了xpath的复杂度。