仿拉鉤app(一)---爬蟲數據準備

工慾善其事必先利其器,準備做一個拉鉤的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)

詳細代碼戳

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章