前面的操作其实都只爬下了职业的类别数据,但仅仅这些是不能做什么有效分析的。这里开始爬更多的信息,前面有些麻烦是因为数据是前端渲染的,罢了不多解释了
1 首先分析URL规则
目的:找打关键词和页码在url中的位置
在打开的51中搜索python关键字,并做页面切换。
python的第一页:
https://search.51job.com/list/000000,000000,0000,00,9,99,python,2,1.html?lang=c&postchannel=0000&workyear=99&cotype=99°reefrom=99&jobterm=99&companysize=99&ord_field=0&dibiaoid=0&line=&welfare=
python的第二页
https://search.51job.com/list/000000,000000,0000,00,9,99,python,2,2.html?lang=c&postchannel=0000&workyear=99&cotype=99°reefrom=99&jobterm=99&companysize=99&ord_field=0&dibiaoid=0&line=&welfare=
不难看出第一行末尾就是关键词和页码的所在位置,但有一点要注意,python是英文,若是输入中文,会进行编码。
目的:学会url对汉字的编码和解码
所有网站都会对中文编码,再拼凑出url网址
2 指定数据提取策略
目的:明白前端渲染和后端渲染
后端渲染:浏览器未修改HTML源码
前端渲染:浏览器得到HTML源码后执行了js代码,填充了数据;一般与json配置使用
目的:通过正则来获取1级界面下的招聘信息(代码出问题了,视频现在看不了,直接按讲义来说)
这一部分就是导包加url的编码
在获取json这里,代码出现问题
至此,一级页面获取完毕。
目的:爬虫请求的随机user_agent
目的:二级页面的获取
这里使用的还是蛮简单的,单纯学xpath可以看一下别人的博客。
目的:完成爬虫的雏形,并且将数据储存到mongoDB中去
目的:了解mongoDB数据库
在使用阶层类数据时,优先使用mongodb数据库,其可视化工具为robo3t。
目的:项目解耦与系统稳定性,针对目前的代码缺陷提出解决思路。第一是项目结构未分离,不利于后期维护;二是未考虑系统异常的风险。
改进思路:1单独配置文件setting,2单独的管道函数做数据储存,3发送请求不再考虑Header等参数,引入下载中间件,4当某页面出现异常数据,可选择记录异常数据,不影响整体爬虫运行