首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python抓取海量面经,直面秋招

Python抓取海量面经,直面秋招

作者头像
老肥码码码
发布2020-01-17 11:40:32
4740
发布2020-01-17 11:40:32
举报

又到了金九时分,要收获一个满意的offer,免不了花心思好好准备。而参考别人的面经,可以让我们在备战秋招时提供不小的帮助。所谓知己知彼,百战不殆,知晓面试流程使得在面试时更有信心应对面试官,了解目标公司的题型来做相应的训练,能够有效地拔高自己的“瞬时技术水平”。

牛客网-互联网求职神器自然就成为了我们的目标,里面有各大公司的面经,一共收录了670家公司。中国科技企业巨头阿里、华为、腾讯、字节跳动等都有大量的面经。

今天我们就来抓取一下这些公司的面经。在上图的页面中我们可以获取每个公司对应的href链接。利用简单的XPath即可得到各个企业的链接,企业的名字以及该企业的面经数量。

我们先进入阿里巴巴的面经页面,并进行翻页观察url链接变化。

https://www.nowcoder.com/discuss/tag/134?type=2&order=0&pageSize=30&expTag=0&query=&page=2

发现截至type=2便是之前获得的href链接。而后面的链接参数可以根据其英文来理解。显然,控制翻页的参数应该是page,其他参数应该不是必要的。正所谓实践是检验真理的唯一标准,我们使用获取的href链接只加上page参数尝试一下,果真如此。

企业的面经数量可以作为page值的一个参考,因为每30条面经会翻页,page增加1。

    def get_enterprise(self):
        
        r=requests.get(self.origin_url,headers=self.headers)
        tree=etree.HTML(r.text)
        enterprise=tree.xpath('//div[@data-nav="企业"]/ul[@class="discuss-tags-mod"]/li/a/@data-href')
        enterprise_name=tree.xpath('//div[@data-nav="企业"]/ul[@class="discuss-tags-mod"]/li/a/span[@class="discuss-tag-item"]/text()')
        num=tree.xpath('//div[@data-nav="企业"]/ul[@class="discuss-tags-mod"]/li/span[@class="discuss-tag-num"]/text()')
        enterprise=[i[13:-7] for i in enterprise]
        num=[int(i[:-1]) for i in num]
        
        return enterprise,enterprise_name,num

接下来要做的事便是获取每一份面经的内容,并保存在本地。根据当前网页的源代码,我们还是利用简洁高效的XPath便可以得到面经的标题和其链接。

这里我想使用面经标题作为文件名,由于文件名的符号要求,我们需要将原有标题中的 \ / : * ? # ” < > | 除去。

    def get_href(self,enterprise,page):
        
        titles_new=[]
        r=requests.get(self.url.format(enterprise,page),headers=self.headers)
        tree=etree.HTML(r.text)
        hrefs=tree.xpath('//div[@class="discuss-main clearfix"]/a[1]/@href')
        titles=tree.xpath('//div[@class="discuss-main clearfix"]/a[1]/text()')
        hrefs=[self.prefix+href for href in hrefs]
        for title in titles:
            if title!='\n':
                titles_new.append(title.replace("\n","").replace("[","").replace("]","").replace("/","").replace("|"," ").replace("*","").replace("?","").replace("\\",",").replace(":",",").replace("<","").replace(">","").replace("\"",""))
        return hrefs,titles_new

接着来到循环的最里层,也就是包含面经内容的html页面。依然使用XPath获取相应的内容。

    def get_article(self,enterprise_name,hrefs,titles):
        
        for i in range(len(hrefs)):
            if os.path.exists('{}/{}.txt'.format(enterprise_name,titles[i])):
                pass
            else:
                r=requests.get(hrefs[i],headers=self.headers)
                tree=etree.HTML(r.text)
                text=tree.xpath('string(//div[@class="post-topic-des nc-post-content"])')
                with open ('{}/{}.txt'.format(enterprise_name,titles[i]),'w',encoding='utf-8') as f:
                    f.write(text.replace("   ","\n"))

另外为了增加程序运行的效率,我们使用了多线程来加速爬虫。每一个公司的面经都保存在这个公司名的文件夹内。

要不了几分钟,百家企业的面经就存放在本地了,选择目标公司,嚼烂面经,便可从容应战,小李在这祝大家秋招顺利,钵满盆满~

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-09-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 算法与数据之美 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档