- 前情回顾
上一节课的作业中,爬取的页面网址与主要的元素基本已确定好。
#面试的基本信息
<a href="">
![](/v3/images/portrait/i_header02.png)#头像
</a>
<p class="f_14 grey_99 dd_bot">面试百度的<a target="_blank" ka="interview-name1" href="/interview/3626/" class="green">数据分析实习生</a>.北京</p>#面试公司、职位、地点
<a target="_blank" ka="interview-result-1" href="/gsmsh8189347.html">
<span class="feel_fail">面试未通过</span> #面试结果
</a>
<article>
<a href="/gsmsh8189347.html?ka=interview-detail1-1" ka="interview-detail1-1" target="_blank">
<h3 class="question_title">#面经标题
面试官很亲切 数据分析岗位更愿意招收性格内向的员工。</h3>
<p class="question_content">#面经内容
面试官很亲切,虽然因为开会延迟了面试时间。岗位主要是数据分析...</p>
</a>
</article>
<div class="rdrc_center">#面试难度测评
<div>
![](/v3/images/star/i_star_blue.png)
<span class="grey_7a">我觉得面试有难度</span>
</div>
<div>
![](/v3/images/star/i_star_blue.png)
<span class="grey_7a">面试总体感觉很好</span>
</div>
</div>
然而,在做这节课的作业时,发现了一个问题:主要的面试信息<question_content> 面经内容是不完全的,需要点击“查看全文”才能看到所有的信息,且该部分的页面元素较为混乱。
这样文字叙述可能太抽象,接下来上图对比一下大家就看清楚了。
仔细观察就可以看到,上面的红色框内的元素还算规整,而下面的主要内容信息就比较乱了。原网页此处需要点击“查看全文”才看得到所有的信息。而在爬虫的过程中,这一点是否合理我不确定,但我知道这绝对不是一个好的爬虫策略。
因此经过一番探究最后敲定了另一套方案,具体如下:
我向爬去的面经分享信息主要的页面元素为<section class="interview_item qa_item wrap_style mt15">,而具体的面经内容信息主要由<article>下包含的内容,从上图中可以看到如下的元素信息:
<a hred="/gsmsh10536702.html" ........>
这是一个面经文章的具体网页,完整的url网页为"http://www.kanzhun.com/gsmsh10536702.html",即看准网的官网链接加个后缀。而点进这个链接后,再次审查该网页的页面元素。
从红色边框中可以看出每个信息的页面元素都比较规整,相比于原网页,爬取会更方便、有规律一些。
所以新的爬取策略如下:“面试”导航栏——搜索关键字“数据分析”——得到所有与数据分析相关的结果页面——进入热度排名较高的公司的面经网页——先爬取公司的主要信息——再进入到各个面经的主页面爬取相关的面经信息
因为爬虫经验较少,所以上述的策略一定存在着问题。因而这一策略会随着后续课程的学习不断的改进,目前是基于我所有相关的知识做出的决策,并不是最终的爬取依据。
好的,以上就是我对上次作业的纠错与修改,下面进入这次课程的作业主题。
- 主要任务:爬取页面元素
根据老师给的爬虫代码进行修改,目前只把核心的一些代码修改了过来,而且还碰到了问题。
一、页面网址设置
仍旧以百度公司为例,具体要爬取的根目录为看准网的网址,种子url是以百度公司为主页的数据分析面经结果。
url_root = 'http://www.kanzhun.com' #根目录
url_seed = 'http://www.kanzhun.com/gsm11514.html?q=%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90&ka=select-hotcom-1' #要爬取的页面
问题
#第九个面经分享
<a href="/gsmsh8190691.html" ka="interview-detail1-9" target="_blank">
<h3 class="question_title">
有自己的风格刚毕业的人不错的选择。
</h3>
</a>
#第十个面经分享
<a href="/gsmsh942478.html" ka="interview-detail1-10" target="_blank">
<h3 class="question_title">
面试官很好 开导性问题。
</h3>
</a>
上面这段html代码是我想要爬取的主要的页面元素,与老师给定的代码有些区别,老师主要爬取属性class = ‘title’的所有元素(代码links = soup.find_all('a', {'class': 'title'}) ),简书的html代码如下:
<a class="title" target="_blank" href="/p/8f6ee3b1efeb">爬虫第三次作业-0706</a>
而这样一比较,问题就出现了。我想爬取的页面信息中并没有独一无二的class属性,这就尴尬了,我如何获取href信息呢?难道要用ka属性吗?然后用正则匹配?
二、爬取页面的主要内容
进入面经的主页面(这里以网页http://www.kanzhun.com/gsmsh10536702.html为例),主要想要爬取的信息的页面元素如下:
<article>
<h1><span class="desc">百度数据分析员面试</span>挺上档次的企业,让人有想法。</h1>
<div class="question_content">面试的时候想问了我对主流的几个地图app的建议和看法,还问了我一些关于对市场的看法以及对个人规划的事情。</div>
<p class="interview_qa">面试官的问题:</p>
<p class="question_title"><em>问</em>面试的时候考官让我说一下当前对于是市场上的所有地图导航app的看法,以及对当前行业的发展走向的看法。</p>
<p class="question_title"><em>答</em>我说现在市面上的地图app主流的有百度和高达以及google。我认为做的很好的是百度和google。两者各有特的。百度有着更加亲和力的app内容,让人更喜欢,地图的精准度是前提,还能有对周边的一些地方有建议性的引导作用。google可能正引导上面更加专业,精准度也略高,但是更像是一款专业性的软件而不是一个让人更加想使用的软件</p>
</article>
对应于这样的页面结构,则对应要爬取的面经标题与面经内容的代码如下:
title = soup.find('span', {'class': 'desc'}).text#获取面经标题
content = soup.find('div', {'class': 'question_content'}).text #获取面试过程信息
content1 = soup.find('p', {'class': 'question_title'}).text #获取面试过程中面试官提到的问题,以及被面试人的回答(附加信息,面经分享中不一定有,但一定要有规则去爬取这部分的信息)
上述这段代码中,面经标题原本应该是<h1>标签中的内容,但这个标签没有任何的独一无二的属性可被识别,因此只能转战到span标签内的信息,不过应该没什么影响,毕竟内容已经得到了。
三、阶段总结
上述即为在完成作业3过程中的结论以及遇到的问题。其中遇到问题时没有足够的储备知识进行灵活的更改代码,其次因个人时间有限,并未运行代码爬取目标页面的主要元素,这一点深感惭愧!后续会抽出时间努力完善这一课的作业,严格要求自己!
除了上述的总结,其实还有一些思路的拓展:是否要将用户对这次面试的评价信息也保存下来呢?关键还有独特属性class可以筛选出信息,所以后续很可能会添加这部分任务到爬取规则中。
<div class="rdrc_center">
<div>
![](/v3/images/star/i_star_blue.png)
<span class="grey_7a">我觉得面试有难度</span>
</div>
<div>
![](/v3/images/star/i_star_blue.png)
<span class="grey_7a">面试总体感觉一般</span>
</div>
</div>
总之,非常期待今天晚上老师的课程!
本文为 泰阁志-解密大数据 学习笔记,了解更多请关注微信“泰阁志”