仿拉钩app(一)---爬虫数据准备

本文分享了使用Python爬取拉钩网招聘信息的实战经验,包括分析页面结构、利用接口请求、解决反爬机制、数据解析及存储等关键步骤。通过搭建IP代理池应对访问限制,实现高效数据抓取。

工欲善其事必先利其器,准备做一个拉钩的app,但是没数据可怎么办,那就直接扒裤衩去爬吧 一般爬虫的思路为:

  1. 分析页面结构
  2. 是否有接口
  3. 模仿请求(解决反爬的各种方式)
  4. 解析数据
  5. 存储数据

按照以上的思路,先分析了一波拉钩网的结构,发现拉钩是直接通过接口传递数据的(这也太爽了),但是有ip访问限制,大概是1分钟请求5次的频率,所以准备一个ip代理池(土豪可以直接买一个)

接下来直接上代码了

配置信息:

client = pymongo.MongoClient(host='localhost', port=27017)
db = client['data_name']
data_collection = db['data_collection ']
headers = {
    "Referer": "https://www.lagou.com/jobs/list_",#必填,否则没数据
    "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 "
                  "(KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36",
}

筛选关键词:

keywords = [
    'java',
    'python',
    '前端',
    ...#你想要的岗位或要求
]

主要爬取流程 先使用本地ip获取->当被限制时,从代理ip池中取出ip爬取数据(该ip不可用则删除,可以使用则连续使用该ip)->将爬取的数据,进行查重并存储。

base_request = requests.post(url, data=data, headers=headers, timeout=3)
if not base_request.json().get('content', ''):
    flag = False
    while not flag:  # 若代理ip没走通则换一个
        try:
            r = requests.post(url, data=data, headers=headers, timeout=3, proxies=proxies)
            if not r.json().get('content', ''):
                raise Exception('这个ip不能用')
            save_to_db(r.json().get('content', ''))  # 存入数据库
            flag = True  # 成功获取数据跳出循环
       except Exception as e:
           if 'HTTPSConnectionPool' in str(e):
               delete_proxy(proxy) # 代理本身不可用则删除该代理
           proxy = str(get_proxy(), encoding='utf-8')
           proxies = {
                         'http': 'http://{}'.format(proxy),
                         'https': 'http://{}'.format(proxy),
           }  # 切换代理
           else:
               save_to_db(base_request.json().get('content', ''),'data') # 存入数据库

def save_to_db(content, now_type):
    if now_type == 'data':
        data_list = content
        for item in data_list:
            print(item)
            find_data = data_collection .find_one(
                {'companyId': item.get('companyId')})
            if not find_data:  # 查重后插入数据库
                data_collection .insert(item)

详细代码戳

转载于:https://my.oschina.net/u/3964441/blog/1999812

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值