兄弟们(敲黑板)!当你想批量爬取招聘网站数据时,有没有遇到过这些情况:
重点来了(掏出小本本记):使用亮数据代理IP可以:
pip install requests beautifulsoup4 pandas
# requests:网络请求神器
# bs4:HTML解析之王
# pandas:数据处理专家
# 代理配置示例(替换成你的认证信息)
PROXY_USER = "你的用户名"
PROXY_PASSWORD = "你的密码"
PROXY_ENDPOINT = "gateway.lumiproxy.com:22225"
import requests
from bs4 import BeautifulSoup
def get_jobs(keyword, page):
# 设置代理(重点!!!)
proxies = {
"http": f"http://{PROXY_USER}:{PROXY_PASSWORD}@{PROXY_ENDPOINT}",
"https": f"http://{PROXY_USER}:{PROXY_PASSWORD}@{PROXY_ENDPOINT}"
}
try:
url = f"https://www.zhipin.com/web/geek/job?query={keyword}&page={page}"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36..."
}
# 发起带代理的请求
response = requests.get(url, headers=headers, proxies=proxies, timeout=10)
response.raise_for_status() # 自动检测HTTP错误
# 解析HTML
soup = BeautifulSoup(response.text, 'lxml')
jobs = []
for item in soup.select('.job-list li'):
title = item.select_one('.job-name').text.strip()
salary = item.select_one('.salary').text.strip()
company = item.select_one('.company-name').text.strip()
jobs.append({
"title": title,
"salary": salary,
"company": company
})
return jobs
except Exception as e:
print(f"第{page}页爬取出错:{str(e)}")
return []
def batch_crawl(keyword, max_page=10):
all_jobs = []
for page in range(1, max_page+1):
print(f"正在爬取第{page}页...")
jobs = get_jobs(keyword, page)
if not jobs: # 遇到封禁立即停止
print("触发反爬机制!建议:")
print("1. 更换代理IP\n2. 增加请求间隔\n3. 检查User-Agent")
break
all_jobs.extend(jobs)
time.sleep(random.uniform(1, 3)) # 随机等待防封
return all_jobs
import pandas as pd
df = pd.DataFrame(all_jobs)
print("原始数据量:", len(df))
# 高级去重(综合三个字段)
df_clean = df.drop_duplicates(
subset=['title', 'salary', 'company'],
keep='first'
)
print("去重后数据量:", len(df_clean))
df_clean.to_csv('job_data.csv', index=False,
encoding='utf-8-sig') # 解决中文乱码
from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("bert-base-chinese")
# 将岗位描述转换为AI可理解的格式
def preprocess(text):
inputs = tokenizer(
text,
max_length=512,
truncation=True,
padding='max_length'
)
return inputs
import torch
from transformers import AutoModelForSequenceClassification
model = AutoModelForSequenceClassification.from_pretrained(
"bert-base-chinese",
num_labels=2 # 示例:岗位分类
)
# 模拟训练循环(实际需加载清洗后的数据)
for epoch in range(3):
optimizer.zero_grad()
outputs = model(**batch)
loss = outputs.loss
loss.backward()
optimizer.step()
法律红线(必看):
道德准则:
技术技巧:
Q:亮数据代理和其他代理有什么区别?
A:实测对比(数据说话):
功能 | 亮数据代理 | 普通代理 |
---|---|---|
IP存活率 | 98% | 60% |
响应速度 | <1s | 2-5s |
地域选择 | 支持定制 | 固定区域 |
Q:为什么我的爬虫突然不工作了?
A:检查清单(照着做):
最后说句掏心窝的:爬虫虽好,可不要贪杯哦~(你懂的)合理合法使用技术才是正道!下期教大家如何用这些数据做薪资预测模型,记得三连关注!