使用Python自动化爬取各个地区招聘上的职位信息保存到csv文件
首先上一下我亲自写的这个爬取需求的完整代码案例,链接如下,希望能帮到有这方面需求的铁铁哦
https://download.csdn.net/download/qq_22593423/88017045
为了实现从无到有的这份代码编写过程,将分为以下几个步骤:
1. 导入所需模块
首先,我们需要导入一些必要的Python模块,包括以下内容:
from bs4 import BeautifulSoup
from time import sleep
import random
import csv
from selenium import webdriver
from selenium.webdriver.common.proxy import Proxy, ProxyType
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
BeautifulSoup
用于解析HTML页面。sleep
函数用于等待一定的时间,模拟人工操作的延迟。random
模块用于生成随机数。csv
模块用于将提取的数据写入CSV文件。selenium
模块用于自动化网页操作,包括打开网页、获取网页内容等。
2. 定义需要爬取的网页URL和数据存储文件
sections = ['101010100', ]
sections1 = ['AI', '数据分析', 'BI', 'ETL', '数据挖掘', '模型']
base_url = 'https://www.zhipin.com/web/geek/job?'
csv_file = open('jobs.csv', mode='a', newline='', encoding='utf-8')
writer = csv.writer(csv_file)
writer.writerow(['职位名称', '地区', '薪水', '标签', '能力要求', '公司名字', '福利待遇', '详情链接'])
sections
和sections1
是要爬取的职位类别和地区列表。base_url
是招聘网站的基础URL。csv_file
是用于存储数据的CSV文件对象。writer
是用于写入CSV文件的Writer对象。writer.writerow()
用于写入CSV文件的表头信息。
3. 遍历职位类别和地区进行页面爬取
for section in sections:
for section1 in sections1:
page_list = list(range(1, 10))
random.shuffle(page_list)
for page in page_list:
# 创建一个代理IP实例
proxy = Proxy()
proxy.proxy_type = ProxyType.MANUAL
proxy.http_proxy = getProxyIP() # 替换为真实的代理IP和端口
# 将代理IP应用于浏览器实例
capabilities = webdriver.DesiredCapabilities.CHROME
proxy.add_to_capabilities(capabilities)
# 定义 Chrome 浏览器实例
browser = webdriver.Chrome(desired_capabilities=capabilities)
# 将窗口设置为全屏
browser.maximize_window()
url = f'{base_url}query={section1}&city={section}&page={page}'
print(f'开始爬了,{url}...')
browser.get(url) # 注意这里是url,而不是"url"
# 设置随机等待时间
wait_time = random.randint(25, 40) # 随机等待5~15秒
sleep(wait_time)
wait = WebDriverWait(browser, 90)
element = wait.until(EC.presence_of_element_located((By.CLASS_NAME, 'job-list-box')))
# 爬取网页内容
content = browser.page_source
soup = BeautifulSoup(content, 'html.parser')
li_tags = soup.select('.job-list-box .job-card-wrapper')
# 提取岗位信息并写入CSV文件
for li in li_tags:
job_name = li.find('span', class_='job-name').text.strip()
job_area = li.find('span', class_='job-area').text.strip()
salary = li.find('span', class_='salary').text.strip()
tag_list1 = li.find('ul', class_='tag-list').find_all('li')
tags1 = ', '.join([tag1.text.replace('"', '') for tag1 in tag_list1])
tag_list = li.find('div', class_='job-card-footer').find('ul', class_='tag-list').find_all('li')
tags = ', '.join([tag.text.replace('"', '').replace("'", '') for tag in tag_list])
company_name = li.find('h3', class_='company-name').text.strip()
company_welfare = li.find('div', class_='info-desc').text.strip()
detail_link = 'https://www.zhipin.com' + li.find('a', class_='job-card-left')['href']
writer.writerow([job_name, job_area, salary, tags1, tags, company_name, company_welfare, detail_link])
# 设置随机等待时间
wait_time = random.randint(25, 40) # 随机等待5~15秒
sleep(wait_time)
browser.quit()
csv_file.close()
- 在双重循环中,我们根据职位类别和地区生成要爬取的URL链接。
- 接着,我们创建了一个代理IP实例,并将其应用于浏览器实例,以便实现IP代理访问网页。
- 然后,我们打开了浏览器,并使用
browser.get(url)
方法打开指定的URL链接。 - 在打开网页后,我们使用
sleep()
函数模拟等待一定的时间,以确保页面加载完毕。 - 接下来,使用
beautifulsoup
库解析网页内容,提取出需要的职位信息,并将其写入CSV文件中。 - 最后,我们再次设置随机等待时间,并使用
selenium
的quit()
方法关闭浏览器。
4. 完成代码并保存结果
最后,我们关闭CSV文件,并完成代码的编写。
csv_file.close()
以上就是从无到有的代码编写过程的详细叙述。该代码实现了爬取招聘网站上的职位信息,并将提取的数据存储到CSV文件中。你可以根据自己的需求进行修改和优化。