selenium+PyQuery+chrome headless 爬取智联招聘求职信息

最近导师让自己摸索摸索Python爬虫,好了就开始一发不可收拾的地步。正巧又碰到有位同学需要一些求职信息对求职信息进行数据分析,本着练练手的目的写了用Python爬取智联招聘网站的信息。这一爬取不得了,智联网站更新了,以前的大佬们的代码不能用,而且全是动态加载,反爬虫着实对于小白的我实在是累的不行,静态还没怎么学会动态的爬取就开始了,各种遇见坑,再出来。不过终于功夫不负有心人,也算是马马虎虎搞出来了。先上图

一个文件里面大概不到3000条数据,不算多。

首先,我就不讲什么是selenium,以及怎么安装还有chrome 的headless怎么使用。这里csdn上面有很多大牛已经给予完美的解释了ps主要我也说不好只是了解以及使用。

当你把这些基础性工作做完了,比如Python安装完毕,以及selenium PyQuery安装完毕后就可以看我的代码详解了。其实大家都是小白所以代码会有详细的注释,看看注释就明白了。废话不多说直接上代码,有啥不懂得欢迎咨询我。jianghaifu@opopto.com,或者留言给我。谢谢各位看官。

#首页负责调用
import savecsv as save


pagenum=int(input("输入您要爬取的页数"))
save.savecsv(pagenum)

# 爬取文章
from selenium import webdriver
import time, random
from pyquery import PyQuery as pq
import os
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.keys import Keys


def _urldata_(url, pageNum):
    # 新版本不支持phantomjs
    # browser = webdriver.PhantomJS()
    # 采用浏览器自带的无头浏览器进行查询
    chrome_options = Options()
    chrome_options.add_argument('--headless')
    chrome_options.add_argument('--disable-gpu')
    browser = webdriver.Chrome(options=chrome_options)

    browser.get(url)

    # # 定义一个大的列表将一个职位所有的招聘信息都放进去
    joblist = []
    # 点击下一页进行访问页面
    for i in range(1, pageNum+1):
        # 对动态网页查询并使用pyquery进行分析
        doc = pq(browser.page_source)
        # 获取一个多个相同属性
        # htm = doc('[class="listItemBox clearfix"]')
        # print(htm)
        html = doc('[class="listItemBox clearfix"]').items()


        listSum = []
        # 获取单个属性
        for tb in html:
            # 定义一个空字典,用于储存数组
            item = {}
            # 提取岗位
            job_title_info = tb('.job_title')
            job_title = job_title_info.attr('title')
            # 获取公司名
            company_title = tb('.company_title').text()
            # 获取薪资
            job_saray = tb('.job_saray').text()
            # 获取地址,工作要求年限,学历
            job_demand = tb('.demand_item').items()

            job_demand_info = []
            for job in job_demand:
                job_demand_info.append(job.text())

            # 获取企业名称以及企业人数
            commpanyDesc = tb('.info_item').items()

            company_info = []
            for job in commpanyDesc:
                company_info.append(job.text())


            # 获取更详细的信息
            job_welfare = tb('.welfare_item').items()

            job_welfare_info = []
            for job in job_welfare:
                job_welfare_info.append(job.text())

            job_welfare_info_list = "|".join(job_welfare_info)

            # 填入数组
            item['job_title'] = job_title
            item['company_title'] = company_title
            item['job_saray'] = job_saray
            item['job_demand_info_address'] = job_demand_info[0]
            item['job_demand_info_age'] = job_demand_info[1]
            item['job_demand_info_back'] = job_demand_info[2]
            item['company_info_back'] = company_info[0]

            item['job_welfare_info_list'] = job_welfare_info_list

            listSum.append(item)


        # 将所有的页面的内容进行保存
        joblist += listSum
        browser.find_elements_by_class_name('btn-pager')[1].click()
        print("爬取第" + str(i) + "页")
        print("数据共" + str(len(listSum)) + "条")
        # 防止被和谐
        p = random.randint(1, 4)
        time.sleep(p)

    return joblist
    browser.quit()

# _urldata_('https://sou.zhaopin.com/?pageSize=60&jl=530&kw=python&kt=3')
# 保存成csv格式
import csv
import spiderurl as combin


def savecsv(pageNum):
    # 定义一个大的列表将所有的招聘信息都放进去
    job_name = ['python', 'java', '机器学习', '数据挖掘', 'c++']
    # job_name = ['python']
    # 工作名字
    for job in job_name:
        # print(job)
        joblist = []
        # 将页面读取的数据保存起来
        # 每个工作的名字工作信息

        url = 'https://sou.zhaopin.com/?pageSize=60&jl=530&kw=' + job + '&kt=3'
        print("开始爬取工作:"+job+"地址是:"+url)

        # 拼接完成爬取文件并解析
        joblist = combin._urldata_(url, pageNum)

        # 把数据存成csv格式
        filenames = ["job_title", "company_title", "job_saray", "job_demand_info_address", "job_demand_info_age",
                     "job_demand_info_back",
                     "company_info_back", "job_welfare_info_list"]
        for list in joblist:
            # 以字典的形式写入文件
            with open(job + ".csv", "a", errors="ignore", newline='') as fp:
                f_csv = csv.DictWriter(fp, fieldnames=filenames)
                f_csv.writerow(list)

好了就这三个文件,很简单的。喜欢就去尝试尝试,当然我的git上面也有https://github.com/Proshare/webSpider_zhilian.git

欢迎评论,我会及时回复的。

 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

酱江奖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值