想做技术自媒体实现财富自由?先看看广告报价吧,无编码学爬虫之二。
今天是持续写作的第 <font color="red">17</font> / 100 天。
如果你有想要交流的想法、技术,欢迎在评论区留言。
从本文开始,将通过一个个的案例带你进入无编码学爬虫领域,玩转 Web Scraper,万物皆可爬。
此类教程涉及图片比较多,学习的时候大量的依赖实操,所以在后续本系列内容将转换为视频载体提供给大家。
缓解一下视疲劳
缓解一下视疲劳
目标网站分析
本次要爬取的网站为:https://www.chuanboyi.com/zimeiti/search-catid-1-page-1.html,选择本案例的原因是要解决一般分页数据如何抓取的问题。
什么是一般分页,例如本案例中数据的分页方式就是通过底部的数字进行分页。
通过点击分页跳转链接发现分页规则为,页面的规则每个网站都不同,多点击几次一般都可以找到对应的规律:
首先创建一个新的爬虫。sitemap
与 start url
书写好即可。常规套路先测试任意一页的数据,实现之后再扩展到所有目标数据。
进入 selector
页面,新增加一个选择器,注意点选的时候至少点选 2 个元素,如果发现元素选择没有达到预期,例如下图所示内容,继续勾选直到选择的数据是你期望的数据即可(希望动图能给你增强理解)。
最终实现的效果是三个红圈中的数据全部存在并且正确, Save Selector。
相同的手法在创建一个 price
选择器。
编写完毕如果需要修改注意是点击右侧的 Edit
,不要直接点击选择器,直接点击选择器会进入到子选择器添加界面。编写的过程中还需要不断的点击 Data preview
去确定数据是否正确。
点击 Element preview
会在页面中通过红色背景标记出选择的数据。
单页数据已经拿到了,接下来修改一下 metadata
。
Edit metadata 是什么意思? 非常简单,就是可以修改
sitemap
信息,包含标题和起始地址。
修改待抓取地址为多个,可以设置一个范围的 URL,范围 URL 设置格式为:
如果设置为上述内容,那在爬取的时候回批量生成 3 个地址。
也可以让数字编码按照 [001-100] 这样的规律生成或者按照 [0-100:10],该内容表示生成 0-100 的数字,但是间隔 10 个数字,也就是生成的是 0,10,20,...,100
。
以上设置需要预先知道总页码是多少,知道总页码之后就可以直接获取到目标数据了。
运行代码之后,在你的任务栏会出现一个蜘蛛网图标,注意不要关闭了。
运行过程中还会出现一个小浏览器,左上角的页码在不断的变动,表示数据在反复抓取。浏览器运行完毕会自动关掉,不要手动关闭(关闭爬虫程序就停止运行了)。
爬虫运行完毕,会出现如下问题,实际数据发现如果设置多个选择器,会导致链接爬取两边,数据并没有放在一起,呈现的效果如下图。还需要进行调整。
以下调整过程希望可以仔细练习,新知识要来喽!
修改爬虫,增加子选择器
上文在选择内容的时候出现了一点点小问题,数据抓取的不是我们期望的格式,咱希望抓到 title
和 price
在一行,此时就需要父选择器与*子选择器*搭配使用了。
啥叫父选择器?网页中的各个元素都可以看成一个盒子,盒子里面有各种东西,可以有小盒子,小盒子里面才放着目标数据。
这种一层一层的嵌套就出现了父级与子级的概念,大盒子就是父级,小盒子就是子级,如果小盒子里面再有一个小盒子呢?子子孙孙无穷尽也。
emmm 不是,其实很多时候,按照父级->子级->子级的子级,这样是就能解决很多问题了。
细心的你可能已经注意到每次选择元素之后,都需要点击一下一个按钮,就是下图的 Done selecting
,完成选择按钮,在这个按钮的左边有三个东东,分别是 S
,P
,C
,含义都在下面,使用的时候按键盘操作即可,一般微操的时候会用。
S:Select,按下键盘的 S 键,选择选中的元素
P:Parent,按下键盘的 P 键,选择选中元素的父节点
C:Child,按下键盘的 C 键,选择选中元素的子节点
点击 select
之后,框选最外层的大元素,也就是选择一个目标区域最大的盒子,如下图所示。
以下 4 个位置相关的内容都核对好。重点注意位置 2,此时我们选择的是 Element
是由于上述动图选择的内容是后续的父级元素,所以此处为 Element
内容。
目前对于这个 Type 下拉列表已经使用了 2 个选项了,一个是 Text,表示选择文本,一个是 Element 表示选中标签,别急后面还有好几种。
接下来的操作需要注意,要在父级标签里面添加子元素选择器,具体使用参考下图。
下图中尤其注意父级选择器,title
和 price
的父级选择器都是刚才创建好的 parent_div
。如果刚才父级选择器中的 Type 设置的是 Text,这里是没有办法选择 parent_div
的。
设置为上述内容之后发现选择的数据格式还是不正确,最终呈现的依旧是交错数据,问题出现在多选位置。
目标数据二次调整
点击下图所示按钮,出现其结构图。
查看当前 sitemap
的选择器图,根节点是什么,包含几个选择器,选择器下包含的子选择器。如果是实心圆圈表示可以展开。
上述爬取数据已经说过是出现在多选位置上,如果使用父级 + 子级选择器,最后的子级需要单选,因为一个父级元素中大概率有且仅有一个目标子元素。修改成如下内容。
点击运行爬虫程序。
得到的数据如下图所示,目标数据没有任何问题,最终在把所有的页面都匹配出来就可以完成任务了。
运行效果截图,注意页码即可。
最终获取到了 1000 条数据,与期望值相同,案例完成。
写在后面
逐步上路,使用 Web Scraper 会越来越有意思的,视频课准备中,元旦前后应该可以首发 CSDN 平台了。
**想学 Python 爬虫,可以订阅橡皮擦专栏哦~
**
博主 ID:梦想橡皮擦,希望大家点赞、评论、收藏。
版权声明: 本文为 InfoQ 作者【梦想橡皮擦】的原创文章。
原文链接:【http://xie.infoq.cn/article/c2bf753caf9b43de84cd10509】。文章转载请联系作者。
评论