Python爬虫如何应对拉勾网的反爬机制?

最近在爬拉勾网 ,但是在爬的过程中遇到好像是滑动验证码
res = requests.get(companyLink, headers=header, cookies=get_cookies(cookies_str))
这是请求带的参数

https://passport.lagou.com/login/login.html?msg=validation&uStatus=2&clientIp=47.105.103.225 请求的时候回偶尔跳转这个登陆页面
所以我猜是反爬 有人遇到过吗?

我试过本地稳定 ip 和动态代理,都会有这种情况发生
Python爬虫如何应对拉勾网的反爬机制?


13 回复

login 不就是登录吗

这种网站应该有反爬吧


拉勾网的反爬确实比较严,主要是动态加载和请求头校验。我常用的方案是用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 time

# 设置Chrome选项
options = webdriver.ChromeOptions()
options.add_argument('--disable-blink-features=AutomationControlled')
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('useAutomationExtension', False)

driver = webdriver.Chrome(options=options)
driver.execute_cdp_cmd('Page.addScriptToEvaluateOnNewDocument', {
    'source': '''
    Object.defineProperty(navigator, 'webdriver', {
        get: () => undefined
    })
    '''
})

try:
    driver.get('https://www.lagou.com/jobs/list_python')
    
    # 等待页面加载
    wait = WebDriverWait(driver, 10)
    job_list = wait.until(
        EC.presence_of_element_located((By.CLASS_NAME, "job-list"))
    )
    
    # 滚动加载更多
    for _ in range(3):
        driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
        time.sleep(2)
    
    # 提取数据
    jobs = driver.find_elements(By.CLASS_NAME, "con_list_item")
    for job in jobs:
        title = job.find_element(By.TAG_NAME, "h3").text
        company = job.find_element(By.CLASS_NAME, "company_name").text
        salary = job.find_element(By.CLASS_NAME, "money").text
        print(f"{title} | {company} | {salary}")
        
finally:
    driver.quit()

关键点:1)用CDP命令隐藏webdriver特征;2)合理设置等待时间避免被识别;3)模拟人类滚动行为。如果数据量不大,这个方案够用了。

真要大规模爬的话得研究他们的接口,不过那又是另一回事了。

依稀记得当年被拉勾禁了一段时间 ip23333

我知道有反爬,所以才来问大家最近有人爬过没有

拉钩的反爬应该挺难弄的,毕竟拉钩好多数据就是自己爬的。

我们公司爬烂了,长期爬最好用代理 ip,一次的话本地 ip 加 cooki 就行
post 请求 ‘https://www.lagou.com/jobs/positionAjax.json?px=new&needAddtionalResult=false’ 这个接口
参数下面自己循环变换
data = {
‘first’: ‘true’,
‘pn’: 页码,
‘kd’: 关键字)
}

爬虫 爬虫,听起来很像很好玩

谁能给我详细解释一下爬虫 ,干什么用的 ,通俗易懂的

用代码替代浏览器手动访问网页,并将目标网页元素 down 下来

低调低调…

我用本地 ip 会 302 跳转 验证码这是咋回事

“success”: false,
“msg”: “您操作太频繁,请稍后再访问”,

你发的这是啥意思

回到顶部