Python中如何编写拉勾网的爬虫程序?

github 地址:
https://github.com/whatsGhost/lagou_spider

总共一百多行代码。
支持全文搜索;屏蔽公司;设置最低薪资下限,上限;最高薪资下限,上限。
搜完后会把职位信息和地址写到文本中。

http://d3.freep.cn/3tb_170312162616uyml583491.png

昨天下午观摩了下python的语法 ,果然还是人生苦短,要用 python ( ̄ヘ ̄ o #)
Python中如何编写拉勾网的爬虫程序?


14 回复

二楼,杭州, 14 毕业,找一个 C++ 服务端的坑。


要爬拉勾网,你得先搞定这几个关键点:反爬机制、动态数据加载和请求参数构造。直接上代码,这里用requestsre实现一个基础职位搜索爬虫:

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)} 个职位")

核心要点:

  1. 会话管理:先用Session()访问首页获取必要cookies
  2. 请求头:必须包含RefererX-Requested-With
  3. 参数构造first参数第一页为’true’,后续为’false’
  4. 频率控制:实际使用时需要加time.sleep()避免被封

注意:拉勾的反爬比较严,可能需要处理验证码或使用代理IP。这个基础版本能跑通,但长期大量爬取需要更完善的策略。

简单说就是:处理好会话和请求头是关键。

看得出来是写 c++的,居然能把 python 写得这么复杂

哈~,这锅甩给 java ,这其实是仿 java ,一个 static main 函数,各种 get/set ……

人生苦短你用 Python 写 Java ……

python 被你这么写也是没谁了

拉勾拉勾 一百年不匹配的网站爬来有什么意义。。

拉勾就是垃圾,有啥好爬的。

scrapy 弄弄就好了吧,简单复杂化了

经 点拨,加上我一点点 java 粗浅的功底(我还是知道 java 程序的入口在哪儿的!!)我居然明白了
staticmethod decorator 的意思

javathon ==

,不要在意这些细节Σ( ° △ °|||)︴

这年头,爬一个页面的程序都能叫爬虫…

回到顶部