博客
关于我
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 学习总结(87)—— Mysql 执行计划(Explain)再总结
    查看>>
    Mysql 学习总结(88)—— Mysql 官方为什么不推荐用雪花 id 和 uuid 做 MySQL 主键
    查看>>
    Mysql 学习总结(89)—— Mysql 库表容量统计
    查看>>
    mysql 实现主从复制/主从同步
    查看>>
    mysql 审核_审核MySQL数据库上的登录
    查看>>
    mysql 导入 sql 文件时 ERROR 1046 (3D000) no database selected 错误的解决
    查看>>
    mysql 导入导出大文件
    查看>>
    MySQL 导出数据
    查看>>
    mysql 将null转代为0
    查看>>
    mysql 常用
    查看>>
    MySQL 常用列类型
    查看>>
    mysql 常用命令
    查看>>
    Mysql 常见ALTER TABLE操作
    查看>>
    MySQL 常见的 9 种优化方法
    查看>>
    MySQL 常见的开放性问题
    查看>>
    Mysql 常见错误
    查看>>
    mysql 常见问题
    查看>>
    MYSQL 幻读(Phantom Problem)不可重复读
    查看>>
    mysql 往字段后面加字符串
    查看>>
    mysql 快速自增假数据, 新增假数据,mysql自增假数据
    查看>>