BeautifulSoup爬取智联招聘数据

BeautifulSoup爬取智联招聘数据

警告:
此项技术仅适用于练习,限制大量大规模爬取,在爬取中使用了个人cookie,请注意不要随意泄露,内含个人隐私信息!
如果过分爬取,会造成ip被封!

1.导入所需函数库
from bs4 import BeautifulSoup
import requests
import pandas as pd
import pymysql
2.爬取招聘数据

在这里插入图片描述

3.配置请求头
## USER_AGENT
USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.134 Safari/537.36 Edg/103.0.1264.77'
## URL:网页从p=1 -> p=34
URL = 'https://sou.zhaopin.com/?jl=531&p=1'
## COOKIE
COOKIE = ''
4.数据请求

[外链图片转存中...(img-cfUTK1AM-1687965918619)]

#网页请求
html=rq.get(url=URL,headers=headers,timeout = 30)
#字符集设置
html.encoding="utf-8"
#获取请求状态码
code=html.status_code
if code==200:
    print("网页请求成功")
    #网页数据解析
    page=bs(html.text,"html.parser")
    #获取岗位名称
    job_name=page.find_all("span",class_="iteminfo__line1__jobname__name")
    #获取岗位薪资
    job_salary=page.find_all("p",class_="iteminfo__line2__jobdesc__salary")
    #获取公司名称
    company_name=page.find_all("span",class_="iteminfo__line1__compname__name")
    #获取公司地址
    company_address=page.find_all("ul",class_="iteminfo__line2__jobdesc__demand")
    #公司介绍
    company_dec=page.find_all("div",class_="iteminfo__line2__compdesc")
else:
    print("网页请求失败")
print(job_name[1])
print(job_salary[1])
print(company_name[1])
print(company_address[1])
print(company_dec[1])
网页请求成功
<span class="iteminfo__line1__jobname__name" title="Java开发工程师"><span style="color: #FF5959;">Java开发</span>工程师</span>

<p class="iteminfo__line2__jobdesc__salary">
          6千-7千
          <!-- --></p>

<span class="iteminfo__line1__compname__name" title="耘盛祥荣(天津)科技创新产业发展有限公司">耘盛祥荣(天津)科技创新产业发展有限公司</span>

<ul class="iteminfo__line2__jobdesc__demand"><li class="iteminfo__line2__jobdesc__demand__item">天津-滨海新区</li> <li class="iteminfo__line2__jobdesc__demand__item">不限</li> <li class="iteminfo__line2__jobdesc__demand__item">大专</li></ul>

<div class="iteminfo__line2__compdesc"><span class="iteminfo__line2__compdesc__item">其它 </span> <span class="iteminfo__line2__compdesc__item">20-99人 </span></div>
5.定义函数
# 用来获取网页body标签内容的方法
def get_body_text(url):
    try:
        headers = {
            'User-Agent':USER_AGENT, 
            'Cookie':COOKIE.encode("utf-8").decode("latin1")
        }
        req = requests.get(url = url, headers = headers, timeout = 30)
        # 若状态码不是200,则抛出异常
        req.raise_for_status()
        req.encoding = 'UTF-8'
    except Exception as e:
         print('爬取错误', e)
    else:
        print(req.url, '爬取成功')
        return BeautifulSoup(req.text, 'html.parser')
6.数据爬取
## 从一个 job_info_block 中提取出所需信息的方法
#数据库配置
conn = pymysql.connect(host="localhost",port=3306,user="root",passwd="root",db="invite_data" )
#使用cursor()方法获取操作游标 
cursor = conn.cursor()
def find_info(job_info):
    # 添加职位名称
    jobName=job_info.find('span', {'class':'iteminfo__line1__jobname__name'}).get_text()
    # 添加薪资
    salaryDesc=job_info.find('p', {'class':'iteminfo__line2__jobdesc__salary'}).get_text().replace(' ','').replace('\n','')
    # 添加工作要求
    jobLabels=job_info.find_all('li', {'class':'iteminfo__line2__jobdesc__demand__item'})[1].get_text()
     # 添加技能要求
    skills=str(job_info.find_all('div', {'class':'iteminfo__line3__welfare__item'}))
    # 添加经验要求
    jobExperience=job_info.find_all('li', {'class':'iteminfo__line2__jobdesc__demand__item'})[2].get_text()
    # 添加工作地址
    cityName=job_info.find_all('li', {'class':'iteminfo__line2__jobdesc__demand__item'})[0].get_text()
    # 添加公司名称
    brandName=job_info.find('span', {'class':'iteminfo__line1__compname__name'}).get_text()
    sql="INSERT INTO job_list (jobName, salaryDesc, jobLabels, skills, jobExperience, cityName, brandName) VALUES (%s,%s,%s,%s,%s,%s,%s)"
    param=(jobName, salaryDesc, jobLabels, skills, jobExperience, cityName, brandName)
    cursor.execute(sql,param)
    # 提交
    conn.commit()
7.定义主函数
def main():
    BASE_URL = 'https://sou.zhaopin.com/?jl=531&p='
    PAGE = 1
    ## 定义一个列表用来存储职位信息
    job_list = []
    while PAGE <= 34:
        # 拼接URL
        URL = BASE_URL + str(PAGE)
        # 发送请求,获取当前页的HTML文本
        body = get_body_text(URL)
        # 获取当前页中的所有job_info代码块
        job_infos = body.find_all('a', {'class' : 'joblist-box__iteminfo'})
        # 循环info_block_list,把处理后的job_info添加到job_list中
        for job_info in job_infos:
            job_list.append(find_info(job_info))
        job_list.to_txt(f'../data/json/zhaoping2{PAGE}.txt')
        PAGE += 1
8.主启动器
if __name__ == '__main__':
    main()
  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,以下是一个示例代码,用于爬取智联招聘网站上的数据分析师工作岗位信息: ```python import requests from bs4 import BeautifulSoup url = 'https://fe-api.zhaopin.com/c/i/sou?start=0&pageSize=60&cityId=489&industry=10100&salary=0,0&workExperience=-1&education=-1&companyType=-1&employmentType=-1&jobWelfareTag=-1&kw=数据分析师&kt=3&_v=0.97530866&x-zp-page-request-id=8d3f7b1e6c9a4c8e9dc8a2a6bb605d4e-1626243117597-609241' headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Edge/16.16299' } response = requests.get(url, headers=headers) soup = BeautifulSoup(response.content, 'html.parser') job_list = soup.find_all('div', {'class': 'job-list'}) for job in job_list: job_name = job.find('a', {'target': '_blank', 'data-jid': True}).text.strip() job_salary = job.find('span', {'class': 'salary'}).text.strip() job_company = job.find('a', {'class': 'company-name'}).text.strip() job_location = job.find('span', {'class': 'job-area'}).text.strip() job_experience = job.find('span', {'class': 'job-exp'}).text.strip() print(job_name, job_salary, job_company, job_location, job_experience) ``` 在这个示例代码中,我们设置了筛选条件,只爬取数据分析师工作岗位的信息。同时,我们使用了 requests 库向智联招聘网站发送了一个 HTTP 请求,并设置了请求头部信息,以避免被网站识别为爬虫。然后,我们使用 BeautifulSoup 库解析了页面内容,并从中提取出了工作岗位信息。 您可以根据自己的需求修改代码中的参数和条件,以获得您需要的工作岗位信息。注意,爬取网站信息时要遵守相关法律法规和网站规定,不要过度频繁地请求网站,以免对网站造成影响。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

IT小辉同学

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

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

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

打赏作者

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

抵扣说明:

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

余额充值