当前位置:   article > 正文

用Python轻松爬下招聘网站七千条招聘信息!_爬取智联招聘代码

爬取智联招聘代码

前言

利用Python requets+selenium 爬取智联招聘中全国招聘数据。如果看过我之前的文章那应该知道我们之前写过一个纯用selenium来爬智联招聘的爬虫

我的目的是需要进入页面获取招聘详情页的链接,通过链接再将数据进行爬取

一、列表页URL获取

下方是列表页的url,其中jl后可直接用省份代替,kw即为搜索的关键词,p表示页数

https://sou.zhaopin.com/?jl=532&kw=%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90&p=1
修改后:
https://sou.zhaopin.com/?jl=省份&kw=关键词&p=页数

  • 1
  • 2
  • 3
  • 4

但是有一点特别重要,我们要想实现全站爬取,必然离不开循环,但是每一个省份对应的总页数是不一样的,我们必须获取每一个省份对应的总页数 然后制造一个url列表以此获取详情页链接

在这里插入图片描述

但是就如上图,其总页数是被隐藏的,这时我想到的方法是,利用selenium访问在页数框中输入一个远大于页数的值,他就会自动返回页数,其中有一点要注意,智联招聘每输入一个网址访问就会让你重新扫码登陆一次,所以在第一次访问页面获取cookie,供下次访问使用

def Get_Page(self):
    page_list=[]
    listCookies=[]
    print("开始获取省份对应最大页数")
    for jl in self.jl_list:
        url="https://sou.zhaopin.com/?jl=%s&kw=%s"%(jl,self.keyword)
        if len(listCookies) >0:
            for cookie in listCookies[0]:
                self.bro.add_cookie(cookie)
        else:
            pass
        self.bro.get(url)
        sleep(9)
        listCookies.append(self.bro.get_cookies())
        try:
            self.bro.execute_script('window.scrollTo(0, document.body.scrollHeight)')  # 向下拉动一屏
            self.bro.find_element_by_xpath('//div[@class="soupager__pagebox"]/input[@type="text"]').send_keys(1000)  # 在页数框中输入远大于页数的值
            button=self.bro.find_element_by_xpath('//div[@class="soupager__pagebox"]/button[@class="soupager__btn soupager__pagebox__gobtn"]')
            self.bro.execute_script("arguments[0].click();", button)
            self.bro.execute_script('window.scrollTo(0, document.body.scrollHeight)')  # 向下拉动一屏
            page = self.bro.find_element_by_xpath('//div[@class="soupager"]/span[last()]').text
        except Exception as e:
            print(e)
            page=1
            pass
        page_list.append(page)
    self.bro.quit()
    return page_list

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

我们知道了列表url的构成以及获取了每个省份的最大页数,于是我们可以批量准确的生成列表url,我用“数据分析”为关键词,最后获取了300多个列表url

def Get_list_Url(self):
    list_url=[]
    print("开始拼接列表页url")
    for a, b in zip(self.jl_list,self.Get_Page()):
        for i in range(int(b)):
            url = "https://sou.zhaopin.com/?jl=%s&kw=%s&p=%d" % (a,self.keyword,int(b))
            with open("list_url.txt","a", encoding="utf-8") as f:
                f.write(url)
                f.write("\n")
            list_url.append(url)
    print("共拼接%d个列表页url"%(len(list_url)))
    return list_url

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

现在我们呢已经有了列表url,这样我们就可以访问url以此获取其每个招聘信息的详情页url

二、详情页URL获取

我们通过访问所有的列表url目的是为了获取每一个招聘信息的详情url,右键检查元素可发现,详情列表就在url a标签中

在这里插入图片描述

对此我们可以写代码

def Parser_Url(self, url):
    list_header = {
        'user-agent': '',
        'cookie': ''
    }
    try:
        text = requests.get(url=url, headers=list_header).text
        html = etree.HTML(text)
        urls = html.xpath('//div[@class="joblist-box__item clearfix"]/a[1]/@href')
        for url in urls:
            with open("detail_url.txt","a", encoding="utf-8") as f:
                f.write(url)
                f.write("\n")
    except Exception as e:
        print(e)
        pass

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

现在我们需要通过列表url获取详情url

def Get_detail_Url(self):
    print("开始获取详情页url")
    with open("list_url.txt","r",encoding="utf-8") as f:
        list_url=f.read().split("\n")[0:-1]
    for url in list_url:
        self.Parser_Url(url)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

三、获取数据

我拿到了七千多条详情url,最后我们就可以利用这些url去获取数据

先写一个解析数据函数

def Parser_Data(self,text):
    html = etree.HTML(text)
    dic = {}
    try:
        dic["name"] = html.xpath('//h3[@class="summary-plane__title"]/text()')[0]
    except:
        dic["name"] = ""
    try:
        dic["salary"] = html.xpath('//span[@class="summary-plane__salary"]/text()')[0]
    except:
        dic["salary"] = ""
    try:
        dic["city"] = html.xpath('//ul[@class="summary-plane__info"]/li[1]/a/text()')[0]
    except:
        dic["city"] = ""
    with open(".//zhilian.csv", "a", encoding="utf-8") as f:
        writer = csv.DictWriter(f, dic.keys())
        writer.writerow(dic)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

最后我们通过详情页url调用解析数据函数

def Get_Data(self):
    print("开始获取数据")
    detail_header = {
        'user-agent': '',
        'cookie': ''
    }
    with open("detail_url.txt","r",encoding="utf-8") as f:
        detail_url=f.read().split("\n")[0:-1]
    for url in detail_url:
        '''使用selenium访问'''
        # self.bro.get(url)
        # self.Parser_Data(self.bro.page_source)
        '''使用requests访问'''
        # text=requests.get(url,headers=detail_header,proxies={"http":'http://213.52.38.102:8080'}).text
        # self.Parser_Data(text)
        sleep(0.2)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

如果使用requests访问就需要修改请求头信息

总结

利用requests+selenium的方法 加快了获取数据的速度,相较于之前 纯利用selenium的方式极大的缩短了时间

感兴趣的小伙伴,赠送全套Python学习资料,包含面试题、简历资料等具体看下方。

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。

img
img

二、Python必备开发工具

工具都帮大家整理好了,安装就可直接上手!img

三、最新Python学习笔记

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。

img

四、Python视频合集

观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

img

五、实战案例

纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

img

六、面试宝典

在这里插入图片描述

在这里插入图片描述

简历模板在这里插入图片描述

若有侵权,请联系删除

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/939960
推荐阅读
相关标签
  

闽ICP备14008679号