这是一个爬取boss直聘招聘信息的代码。
Selenium 是一个广泛使用的 Python 抓取库,用于抓取动态 Web 内容。它通过单击按钮、填写表格等来模仿人类交互。
Selenium 与许多浏览器兼容,例如 Chrome 和 Firefox,允许您选择最适合您的网络抓取项目的浏览器。这种灵活性有助于确保在不同的浏览器环境中获得一致的结果。
👍 优点: 它可以抓取动态网页。多浏览器支持。
👎 缺点:Selenium可能很慢。它无法获取状态代码。这既费时又费力。
---------代码-----------
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import csv
from selenium.webdriver.chrome.service import Service
from selenium import webdriver
from selenium.webdriver.edge.service import Service
from webdriver_manager.microsoft import EdgeChromiumDriverManager
from urllib.parse import quote
# 打开CSV文件
f = open('/boss-beijing-数字化产业_广州.csv', mode='a', encoding='utf-8-sig', newline='')
csv_writer = csv.writer(f)
csv_writer.writerow(['岗位名称', '薪资待遇', '岗位详情', '岗位地区', '公司福利', '公司名称', '公司规模', '岗位需要技能', '岗位详情链接'])
# 打开浏览器
service = Service(EdgeChromiumDriverManager().install())
driver = webdriver.Edge(service=service)
# driver = webdriver.Edge() # 使用Edge浏览器
# driver = webdriver.Chrome() # 如果使用Chrome浏览器可以替换这一行
positions = [
'101301', '101302', '100120', '100117', '101310',
'100104', '130121', '100511', '100514', '100122',
'100508', '100515', '100507', '100506', '100512' ]
pages = range(1, 11)
try:
# 对每个position,遍历页面范围
for position in positions:
for page in pages:
# 2. 打开一个网址
url = r'https://www.zhipin.com/web/geek/job?city=101280100&position={}&page={}'.format(position, page)
driver.get(url)
print(url)
# 等待10秒(注意:这里使用 implicitly_wait 可能不是最佳实践,考虑使用 WebDriverWait)
driver.implicitly_wait(10)
# 3. 获取数据 定位数据
lis = driver.find_elements(By.CSS_SELECTOR, '.job-card-wrapper')
# 二次提取岗位具体信息,将符合公司和岗位名称条件的保存在csv中
for li in lis:
job_name = li.find_element(By.CSS_SELECTOR, '.job-name').text
salary = li.find_element(By.CSS_SELECTOR, '.salary').text
tag_list = li.find_element(By.CSS_SELECTOR, '.tag-list').text
job_area = li.find_element(By.CSS_SELECTOR, '.job-area').text
info_desc = li.find_element(By.CSS_SELECTOR, '.info-desc').text
company_name = li.find_element(By.CSS_SELECTOR, '.company-name').text
company_tag_list = li.find_element(By.CSS_SELECTOR, '.company-tag-list').text if li.find_elements(By.CSS_SELECTOR, '.company-tag-list') else ''
job_need = li.find_element(By.CSS_SELECTOR, '.job-card-footer.clearfix ul').text.split('|')
job_url = li.find_element(By.CSS_SELECTOR, '.job-card-body.clearfix a').get_attribute('href')
# 如果公司名称包含在目标公司列表中,保存数据
csv_writer.writerow([job_name, salary, tag_list, job_area, info_desc, company_name, company_tag_list, job_need, job_url])
finally:
# 关闭浏览器
driver.quit()
# 关闭CSV文件
f.close()