Python爬虫项目:抓取智联招聘信息

本文介绍了一款针对智联招聘网站的Python爬虫程序,该程序能够抓取指定城市的Python工程师职位信息,并将结果保存为CSV文件。文章提供了完整的代码实现,包括构造请求地址、发送HTTP请求、解析HTML内容及数据持久化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

来自https://mp.weixin.qq.com/s/0SzLGqv2p0-IWSN3r8bOHA
'''
Python爬虫之五:抓取智联招聘基础版 
该文件运行后会产生一个代码,保存在这个Python文件所在的文件夹。

https://sou.zhaopin.com/jobs/searchresult.ashx?jl=%E5%8C%97%E4%BA%AC&kw=python%E5%B7%A5%E7%A8%8B%E5%B8%88&sm=0&isfilter=1&p=1&re=2005
searchresult.ashx?jl=北京&kw=python工程师&sm=0&isfilter=1&p=1&re=2005

url = 'https://sou.zhaopin.com/jobs/searchresult.ashx?' + urlencode(paras)

#构造请求地址
paras = {
	'j1' : '北京'				#搜索城市
	'kw' : 'Python工程师'			#搜索岗位
	'isadv' : '0'				#是否打开更详细搜索
	'isfilter' : '1'			#是否对结果过滤
	'p' : '1'					#显示页数
	're' : '2005'				#显示地区代码
}

url = 'https://sou.zhaopin.com/jobs/searchresult.ashx?' + urlencode(paras)


#请求头
headers = {
	'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'.
	'Host': 'sou.zhaopin.com',
	'Referer': 'https://www.zhaopin.com/',
	'Accept': 'text/html, application/xhtml + xml, application/xml; q = 0.9, image/webp, image/apng, */*; q = 0.8',
	'Accept-Encoding': 'gzip, deflate, br',
	'Accept-Language': 'zh-CN, zh; q= 0.9'
}



# 正则表达式进行解析
pattern = re.compile('<a style=.*? target = "_blank">(.*?)</a>.*?'
	'<td class = "gsmc"><a href= "(.*?)" target = "_blank">(.*?)</a>.*?'
	'<td class = "zwyx">(.*/)</td>', re.S)

# 匹配所有符合条件的内容
items = re.findall(pattern, html)

#解析后剔除job两侧的标签:<b>job</b>
for item in items:
	job_name = items[0].replace('<b>', '').replace('</b>', '')
	yield {
			'job' : job_name,
			'website' : item[1],
			'company' : item[2],
			'salary' : item[3]
	}


########写入CSV文件
import csv
def write_csv_headers(path, headers):
	#写入表头
	with open(path, 'a', encoding = 'gb18030', newline = '') as f:
		f_csv = csv.DictWriter(f, headers).writeheader()

def write_csv_rows(path, headers, rows):
	###写入行
	with open(path, 'a', encoding = 'gb18030', newline = '') as f:
		f_csv = csv.DictWriter(f, headers).writerows(rows)


#使用tqdm进行进度显示



from tqdm import tqdm
from time import sleep
for i iin tqdm(range(1000)):
	sleep(0.01)
'''

#################完整代码##################################
import re   			#正则表达式库
import csv 				#CSV格式库
import requests 		#网页解析
from tqdm import tqdm 	#进度条显示
from urllib.parse import urlencode 			#Python 3 的 urllib 模块是一堆可以处理 URL 的组件集合
from requests.exceptions import RequestException 		#方法 urlencode 可以向 URL 传输数据

def get_one_page(city, keyword, region, page):
    '''
    获取网页html内容并返回
    '''
    paras = {
        'jl': city,         # 搜索城市
        'kw': keyword,      # 搜索关键词 
        'isadv': 0,         # 是否打开更详细搜索选项
        'isfilter': 1,      # 是否对结果过滤
        'p': page,          # 页数
        're': region        # region的缩写,地区,2005代表海淀
    }

    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36',
        'Host': 'sou.zhaopin.com',
        'Referer': 'https://www.zhaopin.com/',
        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
        'Accept-Encoding': 'gzip, deflate, br',
        'Accept-Language': 'zh-CN,zh;q=0.9'
    }

    url = 'https://sou.zhaopin.com/jobs/searchresult.ashx?' + urlencode(paras)
    try:
        # 获取网页内容,返回html数据
        response = requests.get(url, headers=headers)
        # 通过状态码判断是否获取成功
        if response.status_code == 200:
            return response.text
        return None
    except RequestException as e:
        return None

def parse_one_page(html):
    '''
    解析HTML代码,提取有用信息并返回
    '''
    # 正则表达式进行解析
    pattern = re.compile('<a style=.*? target="_blank">(.*?)</a>.*?'        # 匹配职位信息
        '<td class="gsmc"><a href="(.*?)" target="_blank">(.*?)</a>.*?'     # 匹配公司网址和公司名称
        '<td class="zwyx">(.*?)</td>', re.S)                                # 匹配月薪      

    # 匹配所有符合条件的内容
    items = re.findall(pattern, html)   

    for item in items:
        job_name = item[0]
        job_name = job_name.replace('<b>', '')
        job_name = job_name.replace('</b>', '')
        yield {
            'job': job_name,
            'website': item[1],
            'company': item[2],
            'salary': item[3]
        }

def write_csv_file(path, headers, rows):
    '''
    将表头和行写入csv文件
    '''
    # 加入encoding防止中文写入报错
    # newline参数防止每写入一行都多一个空行
    with open(path, 'a', encoding='gb18030', newline='') as f:
        f_csv = csv.DictWriter(f, headers)
        f_csv.writeheader()
        f_csv.writerows(rows)

def write_csv_headers(path, headers):
    '''
    写入表头
    '''
    with open(path, 'a', encoding='gb18030', newline='') as f:
        f_csv = csv.DictWriter(f, headers)
        f_csv.writeheader()

def write_csv_rows(path, headers, rows):
    '''
    写入行
    '''
    with open(path, 'a', encoding='gb18030', newline='') as f:
        f_csv = csv.DictWriter(f, headers)
        f_csv.writerows(rows)

def main(city, keyword, region, pages):
    '''
    主函数
    '''
    filename = 'zl_' + city + '_' + keyword + '.csv'
    headers = ['job', 'website', 'company', 'salary']
    write_csv_headers(filename, headers)
    for i in tqdm(range(pages)):
        '''
        获取该页中所有职位信息,写入csv文件
        '''
        jobs = []
        html = get_one_page(city, keyword, region, i)
        items = parse_one_page(html)
        for item in items:
            jobs.append(item)
        write_csv_rows(filename, headers, jobs)

#只可以被独立执行,不可以被其他文件引用
if __name__ == '__main__':
    main('北京', 'python工程师', 2005, 10)


### 使用 Selenium 进行智联招聘网站爬虫Python 示例 为了展示如何利用 `Selenium` 技术栈来构建针对智联招聘网的数据收集程序,下面提供了一个简化版的例子。此例子假设已经安装好了必要的软件包并配置好运行环境。 #### 导入所需库 ```python from selenium import webdriver import time ``` #### 初始化 WebDriver 实例 创建一个新的 Chrome 浏览器实例用于自动化控制浏览器行为。 ```python driver = webdriver.Chrome(executable_path='/path/to/chromedriver') # 需要指定 chromedriver 的路径 ``` #### 访问目标页面 让浏览器加载智联招聘首页或其他具体职位列表页链接。 ```python url = "https://www.zhaopin.com/" driver.get(url) time.sleep(3) # 等待页面完全加载完毕再继续执行后续动作 ``` #### 登录账号 (如果必要的话) 某些情况下可能需要先登录才能查看完整的职位详情或申请工作机会。这里省略实际输入用户名密码的过程,仅作示意说明。 ```python login_button = driver.find_element_by_link_text('登录') login_button.click() # 此处应加入等待机制以及模拟填写表单的动作... time.sleep(5) ``` #### 获取职位信息 定位到包含所有职位条目的 HTML 元素,并提取其中的关键字段如公司名称、岗位描述等。 ```python job_listings = driver.find_elements_by_css_selector('.job-title') # 假设类名为 job-title for listing in job_listings[:10]: # 只遍历前十个作为测试 title = listing.text.strip() # 清除多余空白字符 print(f'Position Title: {title}') company_info = listing.find_element_by_xpath('./following-sibling::div').text.split('\n')[0] print(f'Company Name: {company_info}') location_salary_block = listing.find_element_by_class_name('location-name').get_attribute('textContent') loc_sal_parts = location_salary_block.replace(' ', '').split('-') city, salary_range = '-', '-' if len(loc_sal_parts)>1: city = loc_sal_parts[0] salary_range = ''.join(loc_sal_parts[-2:]) print(f'Location: {city}, Salary Range: {salary_range}\n') # 更多属性可以根据实际情况进一步解析... time.sleep(2) # 给服务器一点喘息时间 ``` #### 结束会话 完成数据获取之后记得关闭浏览器窗口释放资源。 ```python driver.quit() ``` 以上就是通过 `Selenium` 对智联招聘实施基本爬取操作的一个简单案例[^1]。需要注意的是,在真实环境中还需要考虑异常处理逻辑、反爬策略应对措施等问题以确保脚本稳定可靠地运行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值