Python爬虫实战:利用代理IP获取招聘网站信息(附源码)

一、为什么要用代理IP?(核心知识点预警!)

兄弟们!今天咱们要聊一个爬虫界的保命技巧——代理IP的使用(敲黑板)。最近有学员问我:"为什么用自己电脑爬招聘网站,爬着爬着就404了?"答案很简单:你的真实IP被网站封了呗!

举个栗子🌰:某招聘网站每分钟最多允许同一IP访问50次。如果你用自己电脑疯狂请求,分分钟触发反爬机制(轻则限流,重则封IP)。这时候就需要代理IP来帮你:

  1. 隐藏真实IP地址(超级重要)
  2. 突破访问频率限制
  3. 绕过地域限制(比如某些岗位仅限特定地区查看)

二、代理IP哪里找?(免费/付费方案对比)

2.1 白嫖方案(适合新手试水)

  • 西刺代理(http://www.xicidaili.com/)
  • 快代理(https://www.kuaidaili.com/)
  • GitHub搜索"free proxy"(会有惊喜)

但免费IP的坑也不少:

  • 存活时间短(可能用半小时就失效)
  • 响应速度慢(延迟500ms+是常态)
  • 安全性未知(小心被中间人攻击)

2.2 氪金方案(企业级推荐)

  • 青果代理(按量付费)
  • 亮数据(BrightData)
  • 芝麻代理(独享IP池)

(PS:这里不提供购买链接,自己搜官网哈~)

三、实战代码教学(手把手系列)

3.1 基础版爬虫(不含代理)

import requests
from bs4 import BeautifulSoup

def get_jobs():
    url = 'https://www.liepin.com/zhaopin/'
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
    }
    
    try:
        response = requests.get(url, headers=headers, timeout=10)
        soup = BeautifulSoup(response.text, 'lxml')
        
        # 解析岗位列表
        jobs = soup.select('.job-list li')
        for job in jobs:
            title = job.select_one('.job-title').text.strip()
            company = job.select_one('.company-name').text.strip()
            print(f"岗位:{title} | 公司:{company}")
            
    except Exception as e:
        print(f"请求失败:{str(e)}")

if __name__ == '__main__':
    get_jobs()

3.2 代理版升级(重点看这里!)

import random

# 代理IP池(示例数据,实际需要动态获取)
PROXY_POOL = [
    {'http': 'http://121.234.128.23:3128'},
    {'http': 'http://112.85.131.124:9999'},
    {'http': 'http://113.121.66.132:808'}
]

def get_with_proxy(url):
    proxy = random.choice(PROXY_POOL)
    
    try:
        response = requests.get(
            url,
            proxies=proxy,
            headers=headers,
            timeout=5
        )
        if response.status_code == 200:
            return response.text
        else:
            print(f"代理失效:{proxy} 状态码:{response.status_code}")
            return None
    except:
        print(f"代理异常:{proxy}")
        return None

# 使用示例
html = get_with_proxy('https://www.liepin.com/python')

四、反反爬策略大全(保命指南)

4.1 User-Agent伪装技巧

不要用默认的requests UA!这里推荐个骚操作:

from fake_useragent import UserAgent
ua = UserAgent()

headers = {
    'User-Agent': ua.random  # 每次随机生成
}

4.2 请求频率控制(核心!)

千万别用time.sleep(1)这种固定间隔!试试正态分布:

import random
import time

def random_delay():
    delay = random.normalvariate(2, 0.5)  # 均值2秒,标准差0.5
    time.sleep(abs(delay))

4.3 验证码破解方案

  • 简单数字验证码:使用Tesseract OCR
  • 复杂滑块验证码:调用打码平台(如超人、图鉴)
  • 极验验证码:考虑selenium模拟操作

五、数据存储方案(MySQL示例)

import pymysql

def save_to_mysql(data):
    conn = pymysql.connect(
        host='localhost',
        user='root',
        password='123456',
        database='jobs'
    )
    
    try:
        with conn.cursor() as cursor:
            sql = """INSERT INTO job_info 
                     (title, company, salary) 
                     VALUES (%s, %s, %s)"""
            cursor.execute(sql, data)
        conn.commit()
    finally:
        conn.close()

六、法律红线预警(必看章节)

根据《网络安全法》第27条:

任何个人和组织不得从事非法侵入他人网络、干扰他人网络正常功能、窃取网络数据等危害网络安全的活动

划重点:

  1. 遵守网站的robots.txt协议
  2. 不要爬取个人隐私数据(如手机号、邮箱)
  3. 控制爬取频率(建议每秒不超过1次)
  4. 商业用途需获得授权

七、完整项目源码

(因篇幅限制,源码已上传GitHub,回复"代理爬虫"获取仓库地址)

八、常见问题Q&A

Q:代理IP总是连接超时怎么办?
A:建议使用付费代理+设置重试机制:

retry_times = 3
for _ in range(retry_times):
    if get_with_proxy(url):
        break

Q:爬到的数据怎么分析?
A:推荐pandas做数据分析,pyecharts做可视化:

import pandas as pd
df = pd.read_sql('SELECT * FROM job_info', conn)
print(df.describe())  # 薪资分布统计

下次想听哪方面内容?留言告诉我!下期预告:《如何用Scrapy-Redis搭建分布式爬虫》记得三连哦~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值