Python中如何编写拉勾网的爬虫程序?
github 地址:
https://github.com/whatsGhost/lagou_spider
总共一百多行代码。
支持全文搜索;屏蔽公司;设置最低薪资下限,上限;最高薪资下限,上限。
搜完后会把职位信息和地址写到文本中。
http://d3.freep.cn/3tb_170312162616uyml583491.png
昨天下午观摩了下python的语法 ,果然还是人生苦短,要用 python ( ̄ヘ ̄ o #)
Python中如何编写拉勾网的爬虫程序?
二楼,杭州, 14 毕业,找一个 C++ 服务端的坑。
要爬拉勾网,你得先搞定这几个关键点:反爬机制、动态数据加载和请求参数构造。直接上代码,这里用requests和re实现一个基础职位搜索爬虫:
import requests
import json
import time
import re
def lagou_spider(keyword, city="全国", page=1):
"""
爬取拉勾网职位数据
:param keyword: 搜索关键词
:param city: 城市名称
:param page: 页码
"""
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
'Referer': 'https://www.lagou.com/jobs/list_{}?city={}'.format(keyword, city),
'X-Requested-With': 'XMLHttpRequest'
}
# 先获取session用于保持cookies
session = requests.Session()
session.get('https://www.lagou.com/', headers=headers)
# 搜索接口
url = 'https://www.lagou.com/jobs/positionAjax.json'
params = {
'city': city,
'needAddtionalResult': 'false'
}
data = {
'first': 'true' if page == 1 else 'false',
'pn': page,
'kd': keyword
}
try:
response = session.post(url, params=params, data=data, headers=headers)
response.raise_for_status()
# 解析JSON数据
result = response.json()
if result['success']:
positions = result['content']['positionResult']['result']
for pos in positions:
print(f"职位: {pos['positionName']}")
print(f"公司: {pos['companyFullName']}")
print(f"薪资: {pos['salary']}")
print(f"经验: {pos['workYear']}")
print(f"城市: {pos['city']}")
print("-" * 50)
return positions
else:
print("请求失败:", result['msg'])
return []
except Exception as e:
print(f"爬取失败: {e}")
return []
# 使用示例
if __name__ == "__main__":
# 爬取Python相关职位,第一页
jobs = lagou_spider("Python", "北京", 1)
# 简单统计
print(f"\n共获取到 {len(jobs)} 个职位")
核心要点:
- 会话管理:先用
Session()访问首页获取必要cookies - 请求头:必须包含
Referer和X-Requested-With头 - 参数构造:
first参数第一页为’true’,后续为’false’ - 频率控制:实际使用时需要加
time.sleep()避免被封
注意:拉勾的反爬比较严,可能需要处理验证码或使用代理IP。这个基础版本能跑通,但长期大量爬取需要更完善的策略。
简单说就是:处理好会话和请求头是关键。
看得出来是写 c++的,居然能把 python 写得这么复杂
哈~,这锅甩给 java ,这其实是仿 java ,一个 static main 函数,各种 get/set ……
人生苦短你用 Python 写 Java ……
python 被你这么写也是没谁了
拉勾拉勾 一百年不匹配的网站爬来有什么意义。。
拉勾就是垃圾,有啥好爬的。
经 点拨,加上我一点点 java 粗浅的功底(我还是知道 java 程序的入口在哪儿的!!)我居然明白了
staticmethod decorator 的意思
mark
javathon ==
,不要在意这些细节Σ( ° △ °|||)︴
这年头,爬一个页面的程序都能叫爬虫…


