Python爬取各大外包网站需求

2023-05-16

文章目录

  • 前言
  • 一、需求
  • 二、分析
  • 三、处理
  • 四、总结


前言

为了更好的掌握数据处理的能力,因而开启Python网络爬虫系列小项目文章。

  • 小项目小需求驱动
  • 总结各种方式
    • 页面源代码返回数据(Xpath、Bs4、PyQuery、正则)
    • 接口返回数据

一、需求

  • 获取一品威客任务数据
  • 获取码市需求任务
  • 获取软件项目交易网需求任务
  • 获取YesPMP平台需求任务

二、分析

一品威客
1、查看网页源代码
2、查找数据
3、获取详情页(赏金、任务要求、需求、状态)

在这里插入图片描述
在这里插入图片描述

软件项目交易网
1、查看网页源码
2、全局搜索数据

在这里插入图片描述
在这里插入图片描述

获取YesPMP平台需求任务
1、查看网页源代码
2、全局搜索数据

在这里插入图片描述
在这里插入图片描述

码市
1、F12抓包即可获取数据
2、构造请求即可获取数据

在这里插入图片描述

三、处理

一品威客
1、任务页任务
2、详情页(处理直接雇佣)
3、获取赏金、任务要求、时间

# -*- encoding:utf-8 -*-
__author__ = "Nick"
__created_date__ = "2022/11/12"


import requests
from bs4 import BeautifulSoup
import re


HEADERS = {"user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36",
           "Content-Type": "text/html; charset=utf-8"}


def get_index_source(url):
    res = requests.request("GET",url=url,headers=HEADERS)
    res.encoding = "utf-8"
    return res.text

# 实例化bs4
def method_bs4(html):
    page = BeautifulSoup(html, "html.parser")
    return page



# 直接雇佣任务
def method_zz(code):
    deal = re.compile(r'<meta name="description" content="(?P<is_direct>.*?)" />',re.S)
    result = deal.finditer(code)
    for i in result:
        check = i.group("is_direct")
        if "直接雇佣任务" in check:
            return True


def get_task_url(html):
    page = method_bs4(html)
    # 通过class属性获取页面的任务div
    div = page.select(".title.marginLeft")
    #
    url_list = {}
    for _div in div:
        # 获取url
        content_url = _div.find("a")["href"]
        content = _div.text
        task = content.split("【数据采集】")[1]
        url_list[task] = content_url
    return url_list


def get_task_content(url_dict):
    with open("一品威客任务.txt",mode="a+", encoding="utf-8") as f:
        for name, url in url_dict.items():
            # print(name,url)
            code_source = get_index_source(url)
            page = method_bs4(code_source)
            # 获取赏金
            money = page.select(".nummoney.f_l span")
            for _money in money:
                task_money = _money.text.strip("\n").strip(" ")
                print(task_money)
            # 直接雇佣任务无法查看详情,进行处理
            result = method_zz(code_source)
            if result:
                f.write(f"直接雇佣-{name}{task_money}\n")
            # 获取开始、结束时间
            time = page.select("#TimeCountdown")
            for _time in time:
                start_time = _time["starttime"]
                end_time = _time["endtime"]
                print(start_time,end_time)
            # 获取需求任务
            content = page.select(".task-info-content p")
            for _content in content:
                content_data = _content.text
                print(content_data)
            f.write(f"{name}---{content_data},{task_money},{start_time},{end_time}\n")


if __name__ == '__main__':
    url = "https://task.epwk.com/sjcj/"
    html = get_index_source(url)
    url_dict = get_task_url(html)
    get_task_content(url_dict)

软件项目交易网
通过Xpath即可获取对应数据

# -*- encoding:utf-8 -*-
__author__ = "Nick"
__created_date__ = "2022/11/12"


import requests
from lxml import etree


HEADERS = {"user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36",
           "Content-Type": "text/html; charset=utf-8"}


def get_index_source(url):
    res = requests.request("GET",url=url,headers=HEADERS)
    res.encoding = "utf-8"
    return res.text

# 实例化etree
def method_xpath(html):
    parse = etree.HTML(html)
    return parse


def get_task_info(html):

    with open("软件交易网站需求.txt",mode="w",encoding="utf-8") as f:
        # 实例化xpath
        parse = method_xpath(html)
        # 通过xpath定位
        result = parse.xpath('//*[@id="projectLists"]/div/ul/li')
        for li in result:
            # 获取任务状态
            status = li.xpath('./div[@class="left_2"]/span/text()')[1]
            # 剔除空格,其它符号
            status = status.strip()
            # 获取任务
            task = li.xpath('./div[@class="left_8"]/h4/a/text()')
            task_content = task[-1].strip()
            # 获取预算
            bond = li.xpath('./div[@class="left_8"]/span[1]/em/text()')[0]
            # 获取人气
            hot = li.xpath('./div[@class="left_8"]/span[2]/em/text()')[0]
            # 发布日期
            start_time = li.xpath('./div[@class="left_8"]/span[3]/em/text()')[0]
            # 截止日期
            end_time = li.xpath('./div[@class="left_8"]/span[4]/em/text()')[0]
            f.write(f"{status},{task_content},{bond},{hot},{start_time},{end_time}\n")




if __name__ == '__main__':
    url = "https://www.sxsoft.com/page/project"
    html = get_index_source(url)
    get_task_info(html)

获取YesPMP平台需求任务
通过PQuery即可获取数据

# -*- encoding:utf-8 -*-
__author__ = "Nick"
__created_date__ = "2022/11/12"


import requests
from pyquery import PyQuery as pq


HEADERS = {"user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36",
           "Content-Type": "text/html; charset=utf-8"}


def get_index_source(url):
    res = requests.request("GET",url=url,headers=HEADERS)
    res.encoding = "utf-8"
    return res.text

# 实例化pq
def method_pq(html):
    parse = pq(html)
    return parse


def get_task_info(html):
    with open("yespmp网站需求.txt",mode="a",encoding="utf-8") as f:
        parse = method_pq(html)
        # 通过class属性进行定位
        result =parse.find(".promain")
        # print(result)
        for _ in result.items():
            # 任务名称
            task_name = _.find(".name").text()
            # 赏金
            price =  _.find(".price").text()
            # 项目周期
            date = _.find(".date").text()
            # 竞标人数
            bid_num =  _.find(".num").text()
            f.write(f"{task_name},{price},{date},{bid_num}\n")


if __name__ == '__main__':
    for i in range(2,10):
        url = f"https://www.yespmp.com/project/index_i{i}.html"
        html = get_index_source(url)
        get_task_info(html)

码市
基本request请求操作(请求头、参数)

# -*- encoding:utf-8 -*-
__author__ = "Nick"
__created_date__ = "2022/11/12"


import requests
import json

headers = {
        'cookie': 'mid=6c15e915-d258-41fc-93d9-939a767006da; JSESSIONID=1hfpjvpxsef73sbjoak5g5ehi; _gid=GA1.2.846977299.1668222244; _hjSessionUser_2257705=eyJpZCI6ImI3YzVkMTc5LWM3ZDktNTVmNS04NGZkLTY0YzUxNGY3Mzk5YyIsImNyZWF0ZWQiOjE2NjgyMjIyNDM0NzgsImV4aXN0aW5nIjp0cnVlfQ==; _ga_991F75Z0FG=GS1.1.1668245580.3.1.1668245580.0.0.0; _ga=GA1.2.157466615.1668222243; _gat=1',
        'referer': 'https://codemart.com/projects?labelId=&page=1',
        'accept': 'application/json',
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36'
    }


def get_data():
    url = "https://codemart.com/api/project?labelId=&page=1"
    payload = {}
    response = requests.request("GET", url, headers=headers, data=payload)
    print(json.loads(response.text))


if __name__ == '__main__':
    get_data()

四、总结

  • Xpath
    • 适用于要获取的信息在某个标签下,且各标签层次明显,通过路径找到位置,for循环遍历即可
  • Bs4
    • 适用于要获取的信息比较分散,且通过选择器可以定位(class唯一、id唯一)
  • PyQuery
    • 适用于要获取的信息比较分散,且通过选择器可以定位(class唯一、id唯一)
  • 正则
    • 通过(.*?)就可以处理元素失效或者定位少量信息
    • 不适用网页代码有很多其它符号,定位失效
  • 接口返回数据
    • 对于接口没有进行加密,通过requests构造请求即可获取数据
    • 关注点在请求头中的参数

欢迎加入免费的知识星球内!
我正在「Print(“Hello Python”)」和朋友们讨论有趣的话题,你⼀起来吧?
https://t.zsxq.com/076uG3kOn

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python爬取各大外包网站需求 的相关文章

  • nginx+php+unoconv 失败?

    原因 xff1a web服务运行用户对自己的home目录没有写入权限 如果网站目录是通过fstab直接bind到 var www的 xff0c 要特别注意检查bind以后 var www目录的权限 xff08 服务器使用unoconv占用C
  • Emacs键盘练习方法

    Emacs里面什么都有 xff0c 比如俄罗斯方块游戏 xff08 tetris xff09 我要说的是 xff0c Emacs里的tetris这不只是个游戏 xff0c 它还是练习键盘的终极武器 玩这个游戏最常用的三个按键是左 右和上箭头
  • Qt中的各种编译器

    1 uic xff1a UI编译器 xff0c 将 ui文件转化为ui h文件 2 rcc xff1a 资源编译器 xff0c 将 qrc文件转换成qrc h文件 3 moc xff1a 元对象编译器 xff0c 将含有Q OBJECT的头
  • Bioconductor软件安装与升级

    本文已于2019 07 12按新版Bioconductor安装包BiocManager出现的问题进行更新 1 修改安装软件源 BioConductor安装需要下载很多文件 xff0c 如果不修改 xff0c 程序很可能是从国外网址下载 xf
  • 使用oligo软件包处理芯片数据

    本博客介绍过 Affy芯片的处理方法 xff0c 其中所使用的软件包有一定的局限性 xff0c 无法读取和分析一些新版Affy芯片 本文介绍oligo软件包的处理方法以解决这些问题 oligo软件包并不是新出现的软件包 xff0c 只因新类
  • R语言中的引号

    1 单引号和双引号 两者都可以用于表示字符串分隔 xff0c 用法和意义没有差别如果字符串包含有分隔符本身 xff0c 字符串内的分隔符引号需要转义 xff08 使用反斜杠 xff09 R语言字符串的打印 显示都是用双引号的形式表示 xff
  • ggplot2柱形图Y轴坐标扩展的简单方法

    ggplot2的坐标轴主要由映射aes确定 xff0c expand limits和coord cartesian虽然可以调整坐标轴刻度 xff0c 但对柱形图不大适用 不少使用者对扩展柱形图Y轴坐标很烦恼 xff0c 有人从源代码层面对开
  • Affy芯片ATH1-121501探针注释的处理

    Affy芯片ATH1 121501探针注释的处理 BioC有Affy芯片ATH1 121501 xff08 GPL198平台 xff09 的注释库文件 xff08 R包 xff09 xff0c 芯片分析后期处理经常要使用 xff0c 导出方
  • Debian Linux使用sun/oracle java

    1 下载Oracle JRE 从oracle 网站下载JRE源码 xff0c 如 jre 8u211 linux x64 tar gz xff0c 无需解压 2 构建JRE安装包 xff0c 并安装JRE 如果没有安装 java packa
  • NGINX + Let's encrypt免费SSL证书

    安装与配置过程不算复杂 xff1a 1 安装openssl和certbot sudo apt get install openssl ssl cert sudo apt get install python certbot nginx t
  • Emacs必修:使用dired管理文件

    1 基本设置 require 39 dired require 39 dired 43 require 39 dired sort ido mode 1 global dired hide details mode 1 setq dired
  • Emacs必修:缓冲区与ibuffer

    如果不太较真 xff0c 缓冲区可以当作是Emacs打开的文件 缓冲区操作就是对打开的文件进行保存 关闭和切换等操作 1 使用ibuffer代替list buffers defalias 39 list buffers 39 ibuffer
  • VNC+SSH的配置与使用(Debian xfce4)

    服务器端设置 安装vncserver xff1a sudo apt get install tightvncserver 配置桌面启动脚本文件 vnc xstartup xff0c 文件不存在则新建 xff0c 内容如下 xff1a bin
  • gcc 工作流程中的4个阶段(预处理、编译和优化、汇编和链接)

    GCC 编译器对程序的编译下图所示 xff0c 分为 4 个阶段 xff1a 预处理 xff08 预编译 xff09 编译和优化 汇编和链接 GCC 的编译器可以将这 4 个步骤合并成一个 预处理 xff1a 在这个阶段主要做了三件事 展开
  • 如何使用R批量处理文件

    免责声明 xff1a 运行下面的代码可能会对你的电脑和文件造成不可恢复的损害 xff0c 请确认明白代码的意义后再运行 xff01 本主对代码运行后果不负任何责任 1 基本函数 1 1 文件操作函数 这类函数很多 xff0c 下面列出的是基
  • MX-Linux大杀器——用U盘把系统和工作都随身带走

    MX能迅速跑到Linux发行版的前面 xff0c 秉承Debian最优良的稳定性传统而又放心引入较新Linux内核是最主要原因 这不是某些无知linux 撸客 在虚拟机上比划三两下就能理解的 本文和本人都不喜欢掺和发行版的争论 xff0c
  • 如何实现python构建打包供他人安装

    假如在同一级目录下有两个python文件 xff08 即python模块 xff09 xff0c 那么这两个模块不需要安装也能相互进行import引用 xff0c 但是不在同级目录下甚至不在同一项目中的模块怎么做到相互引用呢 xff1f P
  • 搭建python3.8虚拟环境+CUDA 11.2+cudnn 8.1.1安装+解决‘libcudart.so.11.0‘和‘libnvinfer.so.7‘动态库缺失

    搭建python虚拟环境 43 CUDA 43 cudnn安装 1 利用conda搭建python3 8环境搭建结束出现 xff1a 2 激活虚拟环境3 安装需要的包4 CUDA安装5 cuDNN安装 对应版本8 1 1 6 番外 xff1
  • Pivotal Greenplum® 6.9-管理员指南-管理系统-使用gpbackup和gprestore的并行备份--通过gpbackup和gprestore创建和使用增量备份

    通过gpbackup和gprestore创建和使用增量备份 gpbackup 和 gprestore工具支持创建AO表的增量备份以及从增量备份中恢复 增量备份会备份所有指定的堆表 xff0c 并仅在表发生更改时备份AO表 xff08 包括A
  • 显卡Memory Clock上限问题排查实践

    背景 有一台ASUS 笔电某次重启后 xff0c 发现memory clock被限制为最大300Mhz 而之前的上限是1500Mhz 感到很奇怪 xff0c 之前查过一次 xff0c 但并未解决 今日下决心排查 排查过程 1 xff0c 怀

随机推荐

  • sorry, this application cannot run under a virtual machine

    win11下运行某应用程序A xff0c 报此错误 网上不少文章采用关闭Hyper V的做法 xff0c 但查看后发现并未勾选Hyper V 经搜索 xff0c 有效的解决办法是 xff1a 以管理员权限打开cmd xff0c 执行 bcd
  • TP Link 路由器 设置

    入手某型号的TP LINK 路由器一台 希望做些定制化的设置 记录一下 1 xff0c 光猫拨号改为路由器拨号 光猫的型号是吉比特某款 xff0c 其地址是192 168 1 1 xff0c 此光猫没有无线 所接的路由器地址是192 168
  • 空目录批量添加文件.gitkeep

    背景 1 xff0c 有个项目存在多个空目录 为保持目录结构 xff0c 希望提交时也能提交这些空目录 手动搜寻空目录比较麻烦 xff0c 希望能采用命令行自动搜索 2 xff0c OS为WINDOWS 11 方法 1 xff0c 切换当前
  • 路由器拨号密码恢复

    背景 路由器拨号上网的密码因时间久远遗忘了 xff0c 恢复并记录下过程 步骤 1 xff0c 安装wireshark choco install wireshark y 注意 实践发现wireshark安装后 xff0c 启动提示还需要安
  • 指定 make install 的安装目录的方法

    方法1 xff1a configure prefix 61 your dir make make install 方法2 xff1a configure make make install DESTDIR 61 your dir 方法3 x
  • 如何删除outlook中的重复邮件

    问题背景 xff1a outlook 卸载重装后 xff0c 会把之前已收的邮件 xff0c 再次下载到本地 xff0c 出现大量重复邮件 解决思路 xff1a 搜索outlook邮件删除重复邮件的工具 xff0c 有outlook dup
  • Win10安装安卓模拟器入坑记

    笔记本换了硬盘 xff0c 安装Win10之后 xff0c 装了一堆软件和工具 xff0c 包括Docker for Windows等 xff0c 然后打算安装一个安卓模拟器 之前一直用的逍遥 xff0c 也没碰到啥问题 xff0c 这次就
  • C# 8.0 新特性

    使用C xff03 8 0中的模式 xff0c 做得更多 Visual Studio 2019预览版2已经发布 xff01 伴随它的还有一些C xff03 8 0的功能 xff0c 供您试用 主要是关于模式匹配 xff0c 但我会在最后提到
  • Android:java.io.IOException: Cannot run program "/system/xbin/su": error=13, Permission denied

    java io IOException Cannot run program 34 system xbin su 34 error 61 13 Permission denied 我的情况 同一套App程序 之前跑在Android4 0中没
  • 还在怕不可以和众多女朋友一起聊天,python教你创建多窗口,再也不怕露馅了

    需求描述 创建一个多用户 xff0c 多房间的全双工聊天室 多用户 xff0c 多房间的意思是可以有多个聊天室 xff0c 每个聊天室里可以有多个用户 xff0c 并且用户可以通过输入房间号进入聊天室 全双工的意思是聊天室中的用户在接收其他
  • webrtc媒体服务器介绍

    一 为什么需要流媒体服务 xff1f 众所周知webrtc原生的网络连接方式是P2P通信模型 xff0c 即通信双方是对等的 如下图左侧图 xff0c 通信双方直接进行音视频传输 xff0c 中间的服务器仅做两端的信令交互 将这种P2P方式
  • C语言——基础查漏补缺(二):《C程序设计试题汇编》应试概念总结

    相关文章 xff1a C语言 基础查漏补缺 xff08 一 xff09 xff1a 超长文帮你理清一些概念 C语言 基础查漏补缺 xff08 三 xff09 xff1a 谭浩强红书刷题笔记大杂烩 C语言 基础查漏补缺 xff08 四 xff
  • 6. 用冒泡法实现对10个整数按从小到大的顺序排序输出

    用冒泡法实现对10个整数按从小到大的顺序排序输出 xff08 完成sort1函数 xff09 span class hljs comment include lt stdio h gt span span class hljs keywor
  • Python图形绘制

    文章目录 前言一 turtle海龟绘图二 Python图形绘制三 绘画小黄人习题巩固 前言 海龟绘图很适合用来引导孩子学习编程 最初来自于 Wally Feurzeig Seymour Papert 和 Cynthia Solomon 于
  • 一个项目带你走进软件测试2

    文章目录 前言一 前期准备二 第一阶段1 熟悉软件项目2 阅读测试计划 三 第二阶段1 根据需求规格说明书设计测试用例2 执行测试用例3 提交bug 三 第三阶段关于项目面试问答 文档下载地址 前言 该项目针对在线的项目 xff08 鹏保宝
  • 查看ubuntu版本

    方法1 xff1a 使用命令 xff1a cat proc version 查看 proc目录下记录的当前系统运行的各种数据 version记录的版本信息可以直接通过cat查看到 xff0c 还可以看到我的gcc版本呢 Linux vers
  • 【接口自动化】接口报错500问题解决

    问题呈现 xff1a Python 43 requests接口报错返回500 xff08 后端没进行相关校验 xff0c 直接返回500 xff09 解决探索 xff1a Python 43 request生成的数据放在postman跑 x
  • 【部署教程入门级别】开源会议室小程序部署

    文章目录 前言一 项目整体二 前要准备1 安装Python 开发环境2 安装redis非关系数据库3 安装mysql服务器和客户端4 安装git工具5 安装微信开发工具6 Github或Gitee注册账号 三 正式部署1 pull源码2 部
  • Python批量获取高校基本信息

    文章目录 前言一 需求二 分析三 处理四 运行效果 前言 为了更好的掌握数据处理的能力 xff0c 因而开启Python网络爬虫系列小项目文章 小项目小需求驱动 xff0c 每篇文章会使用两种以上的方式 xff08 Xpath Bs4 Py
  • Python爬取各大外包网站需求

    文章目录 前言一 需求二 分析三 处理四 总结 前言 为了更好的掌握数据处理的能力 xff0c 因而开启Python网络爬虫系列小项目文章 小项目小需求驱动总结各种方式 页面源代码返回数据 xff08 Xpath Bs4 PyQuery 正