猎聘爬虫(附源码)

前面先啰嗦一点没有用的 , 不然审核不过 , 源码在最底下

编写一个爬虫的基本实现思路可以概括为以下几个步骤。请注意,由于爬虫可能涉及法律和道德问题,特别是当它们用于未经授权地抓取网站数据时,因此在开始之前,请确保你的爬虫行为符合目标网站的robots.txt规则以及当地的法律法规。

1. 确定目标

  • 明确需求:确定你需要从哪些网站抓取哪些数据。
  • 分析网站结构:了解目标网站的页面结构,包括URL模式、页面元素等。

2. 编写爬虫框架

  • 选择编程语言:Python是编写爬虫的热门选择,因为它拥有强大的库支持,如requestsBeautifulSoupScrapy等。
  • 设置基础结构:创建一个基本的Python脚本,导入必要的库。

3. 发送HTTP请求

  • 使用requests库(或其他HTTP客户端库)发送GET或POST请求到目标URL。
  • 处理重定向和Cookies:确保爬虫能够处理重定向和保持会话状态(如登录状态)。
  • 设置请求头:模拟浏览器发送请求,设置合适的User-Agent和其他必要的请求头。

4. 解析HTML内容

  • 使用解析库:如BeautifulSouplxml等,解析HTML文档。
  • 提取数据:根据HTML结构,使用CSS选择器、XPath等方法提取所需数据。

5. 存储数据

  • 保存到文件:将抓取的数据保存为CSV、JSON等格式的文件。
  • 使用数据库:对于大量数据,可以考虑使用数据库(如MySQL、MongoDB)来存储。

6. 处理JavaScript渲染的页面

  • 如果目标网站大量使用JavaScript渲染页面内容,可能需要使用SeleniumPuppeteer(Node.js环境)等工具来模拟浏览器行为。

7. 遵守robots.txt规则和礼貌爬虫

  • 检查robots.txt:在开始抓取之前,检查目标网站的robots.txt文件,确保你的爬虫行为被允许。
  • 设置合理的请求间隔:避免过于频繁地发送请求,给目标网站服务器带来压力。
  • 处理反爬虫机制:如验证码、IP封锁等,可能需要采取额外的措施来绕过这些机制(但请注意,绕过某些反爬虫机制可能违反法律法规)。

8. 调试和优化

  • 调试:在开发过程中,使用打印语句、断点调试等方法来检查爬虫的行为是否符合预期。
  • 优化性能:对于大型网站或需要抓取大量数据的情况,优化爬虫的性能变得尤为重要。可以通过多线程/多进程、异步IO等方式来提高效率。
    废话不多说直接附源码

cookies需要替换成自己的 , 该网站在不登录的情况下只能请求到10页数据 , 想要获得完整数据需要携带登录后的cookies

import requests
import json
from lxml import etree
import os
import openpyxl




headers = {

}


def spiderData():
    # 循环每一页
    for i in range(1, 21):
        # 配置账号参数
        cookies =  ''
        # 网页链接
        url = "https://api-c.liepin.com/api/com.liepin.searchfront4c.pc-search-job"
        # 参数
        data = {
            "data": {
                "mainSearchPcConditionForm": {
                    "city": "410",
                    "dq": "410",
                    "pubTime": "",
                    "currentPage": f"{i}",
                    "pageSize": 40,
                    "key": "",
                    "suggestTag": "",
                    "workYearCode": "0",
                    "compId": "",
                    "compName": "",
                    "compTag": "",
                    "industry": "H01$H01",
                    "salary": "",
                    "jobKind": 2,
                    "compScale": "",
                    "compKind": "",
                    "compStage": "",
                    "eduLevel": ""
                },
                "passThroughForm": {
                    "scene": "init",
                    "ckId": "0nbwaavz2gngc40f8xmfp59in6ymulua",
                    "skId": "pf8wezdo0ezilzl4tyd1g4tcoyh43qe9",
                    "fkId": "0nbwaavz2gngc40f8xmfp59in6ymulua",
                    "suggest": None
                }
            }
        }
        data = json.dumps(data, separators=(',', ':'))
        response = requests.post(url, headers=headers, cookies=cookies, data=data).json()

        print(f"正在爬取第{i + 1}页")
        praseData(response)


# 这段代码主要用于解析和保存来自招聘网站的职位信息。下面是加上注释后的代码:
def praseData(data):
    for z in range(0,40):
        job_card_list = data.get('data', {}).get('data', {}).get('jobCardList', [])
        if 0 <= z < len(job_card_list):
            res_json_item = job_card_list[z]

            # 公司名称
            comp_name = res_json_item.get('comp', {}).get('compName')

            # 职位链接
            job_link = res_json_item.get('job', {}).get('link')

            # 工作地点
            place = res_json_item.get('job', {}).get('dq')

            # 薪资
            salary = res_json_item.get('job', {}).get('salary')

            # 职位名称
            job = res_json_item.get('job', {}).get('title')
        else:
            # 如果z不是有效索引或job_card_list为空,则处理错误或设置默认值
            comp_name = None
            job_link = None
            place = None
            salary = None
            job = None


            # 解析职位详情页面
        sub_data = requests.get(job_link, headers=headers).text
        # 使用 etree 解析 HTML 数据
        xml = etree.HTML(sub_data)
        # 尝试从详情页面中提取公司简介
        try:
            details = xml.xpath('//dl[@class="paragraph"]/dd/text()')[0]
        except:
            details = None

        # 公司简介
        companyProfile = xml.xpath("//div[@class='paragraph-box']/div/text()")
        company_profile = ','.join(companyProfile)

        # 公司信息

        try:
            intorduct = details.split('截止日期')[0].split()
            intorducts = ','.join(intorduct)
        except:
            intorducts = None

        # 保存到 excle 表格
        job_list = [job,place,salary,comp_name,company_profile,intorducts]
        print(job_list)
        save_data_to_xlsx(job_list)

# 保存到excle表格
def save_data_to_xlsx(data ):

    filename = f'job.xlsx'
    name_headers = ['职位', '地点', '薪资', '公司名称', '公司简介','描述']
    if os.path.exists(filename):
        workbook = openpyxl.load_workbook(filename)
        sheet = workbook.active
        sheet.append(data)
    else:
        workbook = openpyxl.Workbook()
        sheet = workbook.active
        # 添加表头
        sheet.append(name_headers)
        sheet.append(data)
    # 保存 Excel 文件
    workbook.save(filename)



if __name__ == '__main__':
    spiderData()


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

攒了一袋星辰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值