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

本文共 3268 字,大约阅读时间需要 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 requests
    from bs4 import BeautifulSoup
    import time
    import pymysql
    # 爬取页数设置
    num = 2
    headers = {
    "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, conn
    def 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, conn
    if __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/

    你可能感兴趣的文章
    MSEdgeDriver (Chromium) 不适用于版本 >= 79.0.313 (Canary)
    查看>>
    MsEdgeTTS开源项目使用教程
    查看>>
    msf
    查看>>
    MSP430F149学习之路——SPI
    查看>>
    msp430入门编程45
    查看>>
    MSSQL数据库查询优化(一)
    查看>>
    MSSQL数据库迁移到Oracle(二)
    查看>>
    MSSQL日期格式转换函数(使用CONVERT)
    查看>>
    MSTP多生成树协议(第二课)
    查看>>
    MSTP是什么?有哪些专有名词?
    查看>>
    Mstsc 远程桌面链接 And 网络映射
    查看>>
    Myeclipse常用快捷键
    查看>>
    MyEclipse更改项目名web发布名字不改问题
    查看>>
    MyEclipse用(JDBC)连接SQL出现的问题~
    查看>>
    mt-datetime-picker type="date" 时间格式 bug
    查看>>
    myeclipse的新建severlet不见解决方法
    查看>>
    MyEclipse设置当前行背景颜色、选中单词前景色、背景色
    查看>>
    Mtab书签导航程序 LinkStore/getIcon SQL注入漏洞复现
    查看>>
    myeclipse配置springmvc教程
    查看>>
    MyEclipse配置SVN
    查看>>