博客
关于我
Python爬虫实战:最新BOOS直聘爬取保姆级教程,你值得拥有!!!
阅读量:644 次
发布时间:2019-03-15

本文共 3206 字,大约阅读时间需要 10 分钟。

BOOS直聘爬虫实战:Python 2020最新版本教程

前言

在BOOS直聘,全面测试其页面数据获取策略。通过分析发现,其页面数据并非通过动态加载,而是采用静态链接的方式存储。因此,可以直接复制页面链接进行爬取。

##]').split('')

尽职与挑战

尽管BOOS直聘的反爬虫机制较为严格,但通过改变cookie值或使用IP代理,可以有效规避反爬限制。同时,使用本地IP代理或遵守网站规定的爬取规则(如通过/login/api获取cookies)是更合理的选择。

数据库设计

@数据库设计:这是一张用于存储BOOS直聘岗位信息 database的设计。

数据获取逻辑

爬取策略

  • 使用requestsBeautifulSoup库抓取页面数据。
  • 遍历页面中的每一个li标签,提取相关信息。例如,通过查找父级classjob-list下的li,进一步获取岗位详情。3.对于每个岗位微调爬取的手法,以应对反爬虫机制的变化。
  • 数据存储

  • 使用数据库进行持久化存储 Suppliers,确保数据安全性和颗粒度。
  • 定义数据库表结构,包含id、title、company、price、education、text、introduce和address字段。
  • 爬虫源码解析

    import requestsfrom bs4 import BeautifulSoupimport timeimport pymysql# 爬取页数设置num = 2headers = {    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36",    "cookie": ""}def init_mysql():    dbparams = {        'host': '127.0.0.1',        'port': 3306,        'user': '数据库账号',        'password': '数据库密码',        'database': 'boos',        'charset': 'utf8mb4'    }    conn = pymysql.connect(**dbparams)    cur = conn.cursor()    return cur, conndef close(cur, conn):    cur.close()    conn.close()def crawing(cur, conn, response):    data_list = BeautifulSoup(response.text, 'lxml')    li_list = data_list.find(class_='job-list').find_all('li')        for data in li_list:        bs = BeautifulSoup(str(data), 'lxml')        title = bs.find('a')['title'].strip()        url = 'https://www.zhipin.com/' + bs.find('a')['href']                company = bs.find(class_='company-text').find(class_='name').text        education = bs.find(class_='info-desc').text        price = bs.find(class_='red').text        page_source = requests.get(url=url, headers=headers, proxies=proxy)        page_source.encoding = 'utf-8'        page_bs = BeautifulSoup(str(page_source.text), 'lxml')                text = page_bs.find(class_='text').text.strip()        try:            introduce = page_bs.find(class_='job-sec company-info').find(class_='text').text.strip()        except:            introduce = '无介绍'                address = page_bs.find(class_='location-address').text.replace('502', '')        cur.execute(sql, (title, company, price, education, text, introduce, address))        conn.commit()            if num < 4:        next_url = f"https://www.zhipin.com/c100010000/?query=python&page={num}&ka=page-{num}"        num += 1        next_data = requests.get(url=next_url, headers=headers, proxies=proxy)        next_data.encoding = 'utf-8'        crawing(cur, conn, next_data)    else:        return cur, connif __name__ == "__main__":    requests.DEFAULT_RETRIES = 5    start_url = "https://www.zhipin.com/c100010000/?query=python&page=1&ka=page-1"    response = requests.get(url=start_url, headers=headers, proxies=proxy)    response.encoding = 'utf-8'    cur, conn = init_mysql()    cur, conn = crawing(cur, conn, response)    close(cur, conn)

    图片辅助说明

    • 图1:显示了请求头设置中的User-Agent和cookie
    • 图2:展示了li标签的结构分析
    • 图3:重点解释了如何提取岗位标题
    • 图4:提供了如何获取公司名称的具体方法
    • 图5:详细说明了如何获取岗位福利信息
    • 图6:强调了对薪资信息的提取方式
    • 图7:说明了如何获取岗位详情
    • 图8:提供了如何获取公司介绍的方法
    • 图9:强调了如何处理工作地点信息
    • 图10:显示了多页爬取链接的生成方式

    运行结果

    运行暂缓,可能的原因是NoneType对象没有find_all方法。考虑到反爬机制,建议更换cookie或IP地址。如果仍有问题,可以采用不用代理IP的方式,或者参考方法中的小技巧进行调整。

    如仍有一些特殊问题,请随时提问!我的GitHub仓库已经收录了这份源码,可star支持我,让我持续更新更多资源!

    转载地址:http://vdolz.baihongyu.com/

    你可能感兴趣的文章
    mysql 为某个字段的值加前缀、去掉前缀
    查看>>
    mysql 主从
    查看>>
    mysql 主从 lock_mysql 主从同步权限mysql 行锁的实现
    查看>>
    mysql 主从互备份_mysql互为主从实战设置详解及自动化备份(Centos7.2)
    查看>>
    mysql 主从关系切换
    查看>>
    MYSQL 主从同步文档的大坑
    查看>>
    mysql 主键重复则覆盖_数据库主键不能重复
    查看>>
    Mysql 事务知识点与优化建议
    查看>>
    Mysql 优化 or
    查看>>
    mysql 优化器 key_mysql – 选择*和查询优化器
    查看>>
    MySQL 优化:Explain 执行计划详解
    查看>>
    Mysql 会导致锁表的语法
    查看>>
    mysql 使用sql文件恢复数据库
    查看>>
    mysql 修改默认字符集为utf8
    查看>>
    Mysql 共享锁
    查看>>
    MySQL 内核深度优化
    查看>>
    mysql 内连接、自然连接、外连接的区别
    查看>>
    mysql 写入慢优化
    查看>>
    mysql 分组统计SQL语句
    查看>>
    Mysql 分页
    查看>>