数据分析之拉勾网(三)

数据分析之拉勾网(三)

拉勾网,这里用谷歌是打不开的,只能换其他浏览器,同样和第一篇步骤一样,也是找动态接口

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传在这里插入图片描述

这里需要注意的是cookie,因为这里每个cookie都是不一样的,所以我们需要先获取它们的cookie,然后才能构建我们的headers,这样才能获取我们需要的信息,通过返回值把每个网页的cookie传到我们的自己搭建的headers里面,这样就可以获取到数据了

def get_cookie():
    url = 'https://www.lagou.com/jobs/list_{}?labelWords=&fromSearch=true&suginput='.format(keyword)
    # 注意如果url中有中文,需要把中文字符编码后才可以正常运行
    headers = {
        'User-Agent': 'ozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3704.400 QQBrowser/10.4.3587.400'
    }
    response = requests.get(url=url,headers=headers,allow_redirects=False)
    return response.cookies

然后就是构建我们的headers和data了,需要改的是data里面的kd而已,kd就是我们的关键词,sid是用md5加密的一个随机数,这里很好破解用我们的hashlib库就好了

 headers = {
        'Host': 'www.lagou.com',
        'Origin': 'https://www.lagou.com',
        'referer': 'https://www.lagou.com/jobs/list_{}?labelWords=&fromSearch=true&suginput='.format(keyword),
        'User-Agent': 'ozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3704.400 QQBrowser/10.4.3587.400'
    }
    data = {
        'first': 'false',
        'pn':int(i),
        'kd': '景区讲解员',
        'sid':str(random_id),
    }
md5 = hashlib.md5()
id = str(random.random())
md5.update(id.encode('utf-8'))
random_id = md5.hexdigest()

然后获取相关信息也是用正则表达式就好了

 # 招聘企业名称
    company_names = re.compile('"companyFullName":"(.*?)",', re.S | re.I)
    company_name = company_names.findall(content)
    # 招聘企业规模
    companysize_texts = re.compile('"companySize":"(.*?)",', re.S | re.I)
    companysize_text = companysize_texts.findall(content)
    # 招聘企业性质
    companytype_texts = re.compile('"financeStage":"(.*?)",', re.S | re.I)
    companytype_text = companytype_texts.findall(content)
    # 招聘工作地区
    workarea_texts = re.compile('"city":"(.*?)",', re.S | re.I)
    workarea_text = workarea_texts.findall(content)
    # 招聘职位名称
    job_names = re.compile('"positionName":"(.*?)",', re.S | re.I)
    job_name = job_names.findall(content)
    # 招聘岗位薪资
    providesalary_texts = re.compile('"salary":"(.*?)",', re.S | re.I)
    providesalary_text = providesalary_texts.findall(content)
    job_hrefs = re.compile('"positionId":(.*?),"', re.S | re.I)
    job_href = job_hrefs.findall(content)

然后当我们想要进去详细页面的时候,却发现,获取不了数据,这个原因也是因为拉勾的反爬虫机制,我们需要加一个params,这个params和上面的sid其实都是一个数,都是用Md5加密获得的,上面我们已经把它的md5给破解了,所以直接照着用就好了

 params = {
        'show':str(random_id),
    }

然后当我们进去的时候发现每个页面的链接是这样的

https://www.lagou.com/jobs/7553194.html?show=dd979620732248e0b4959dd25dd4b608

7553194这个数字我们可以通过上面的动态接口获得,后面show每个都是变化的,细心点发现,其实还是和上面的md5是一个东西来的,因为上面已经写好md5的解密了,所以还是直接拿来用就好了

    for j in job_href:
        href = "https://www.lagou.com/jobs/{}.html?show={}".format(j,str(random_id))
        html = requests.get(href, headers=headers, params=params, cookies=get_cookie())
        context = html.text
        soup = etree.HTML(context)
        job_describe = soup.xpath('//div[@class= "job-detail"]/p/text()')
        j_d = soup.xpath('//div[@class= "job-detail"]/text()')
        job_name = soup.xpath('//h1[@class = "name"]/text()')
        Jobname.append(job_name)
        JobDescribe.append(job_describe)
        jobdescribe.append(j_d)
    df = pd.DataFrame()
    df["企业名称"] = company_name
    df["企业规模"] = companysize_text
    df["企业性质"] = companytype_text
    df["工作地区"] = workarea_text
    df["职位名称"] = Jobname
    df["岗位薪资"] = providesalary_text
    df["岗位描述"] = JobDescribe
    df["岗位介绍"] = jobdescribe
    try:
        df.to_csv("拉勾网.csv", mode="a+", header=None, index=None, encoding="gbk")
        print("写入成功")
    except:
        print("当页数据写入失败")
    time.sleep(1)

这里就是全部思路了,代码的话,可以去我的GitHub账户上面把源代码下载下来,如果对你有帮助的话,不嫌麻烦,可以在我的GitHub点一下start,你的支持是我更新的动力

time.sleep(1)

这里就是全部思路了,代码的话,可以去我的GitHub账户上面把源代码下载下来,如果对你有帮助的话,不嫌麻烦,可以在我的GitHub点一下start,你的支持是我更新的动力

[拉勾网源代码](https://github.com/13060923171/Crawl-Project2/tree/master/%E7%88%AC%E5%8F%96%E6%8B%89%E5%8B%BE%E7%BD%91%E6%8B%9B%E8%81%98%E4%BF%A1%E6%81%AF)

[数据分析之前程无忧(一)](https://blog.csdn.net/zyh960/article/details/108084173)

[数据分析之大街网(二)](https://blog.csdn.net/zyh960/article/details/108084272)

[数据分析之拉勾网(三)](https://editor.csdn.net/md/?articleId=108084318)

[数据分析之数据清洗(四)](https://blog.csdn.net/zyh960/article/details/108084347)


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

有猫腻妖

你的鼓励是我更新的动力

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

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

打赏作者

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

抵扣说明:

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

余额充值