文章目录

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

前言

为了更好的掌握数据处理的能力,因而开启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 reHEADERS = {"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 Truedef get_task_url(html):page = method_bs4(html)# 通过class属性获取页面的任务divdiv = page.select(".title.marginLeft")#url_list = {}for _div in div:# 获取urlcontent_url = _div.find("a")["href"]content = _div.texttask = content.split("【数据采集】")[1]url_list[task] = content_urlreturn url_listdef 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.textprint(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 etreeHEADERS = {"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 parsedef get_task_info(html):with open("软件交易网站需求.txt",mode="w",encoding="utf-8") as f:# 实例化xpathparse = 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 pqHEADERS = {"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 parsedef 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 jsonheaders = {'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

Python爬取各大外包网站需求相关推荐

  1. 从入门到入土:基于Python爬取四川大学所有官方网站|狗头保命|

    此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 本人博客所有文章纯属学习之用,不涉及商业利益.不合适引用,自当删除! 若 ...

  2. python制作pdf教程_学以致用:Python爬取廖大Python教程制作pdf!

    学以致用:Python爬取廖大Python教程制作pdf! python-tutorial-pdf 当我学了廖大的Python教程后,感觉总得做点什么,正好自己想随时查阅,于是就开始有了制作PDF这个 ...

  3. python爬取股票大单历史记录_python爬取股票实时数据,python爬虫与股票分析

    内容导航: Q1:怎么学python爬取财经信息 本程序使用Python 2.7.6编写,扩展了Python自带的HTMLParser,自动根据预设的股票代码列表,从Yahoo Finance抓取列表 ...

  4. python爬取安居客二手房网站数据

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取 python免费学习资 ...

  5. Python爬取各大汽车销量信息

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 滑稽研究所 | 作者 滑稽研究所 | 来源 我们可以看到这个网页上面有我们 ...

  6. 用Python爬取需要登录的网站

    最近我必须执行一项从一个需要登录的网站上爬取一些网页的操作.它没有我想象中那么简单,因此我决定为它写一个辅助教程. 在本教程中,我们将从我们的bitbucket账户中爬取一个项目列表. 教程中的代码可 ...

  7. JAVA爬需要账号登录的网_如何用 Python 爬取需要登录的网站?

    最近我必须执行一项从一个需要登录的网站上爬取一些网页的操作.它没有我想象中那么简单,因此我决定为它写一个辅助教程. 在本教程中,我们将从我们的bitbucket账户中爬取一个项目列表. 教程中的代码可 ...

  8. python爬取安居客二手房网站数据(转)

    之前没课的时候写过安居客的爬虫,但那也是小打小闹,那这次呢, 还是小打小闹 哈哈,现在开始正式进行爬虫书写 首先,需要分析一下要爬取的网站的结构: 作为一名河南的学生,那就看看郑州的二手房信息吧! 在 ...

  9. python爬取股票大单历史记录_定向爬取股票数据——记录一次爬虫实战

    今天是八月2号,自学python爬虫已经一整个月了.不学不理解,真正学了才发现,python不愧是一门博大精深的高级编程语言,我学到现在也才只见识到它冰山一脚,python应用的范围即便相比于c.c+ ...

最新文章

  1. W3C XSL Transformations (XSLT) Version 2.0 翻译计划
  2. cmake 编译Release版本
  3. mysql数据库操作语句大全
  4. 跨主机使用 Rex-Ray volume - 每天5分钟玩转 Docker 容器技术(77)
  5. my task is always searched based on employee responsible
  6. 经典排序算法(6)——直接选择排序算法详解
  7. 使用SQL Server作业设置定时任务
  8. mall-swarm是一套微服务商城系统
  9. tesseract 提升 速度_2020斗式提升机料斗呼伦贝尔厂家定制哪家好
  10. 深度解析容器化技术在广发证券交易系统的应用【转】
  11. 《Hadoop MapReduce实战手册》一1.10 使用MapReduce监控UI
  12. LADRC的学习——总概
  13. 使用java的io流编写日志类
  14. Madwifi Mad coding:自底向上分析associated_sta的更新过程 —— RSSI和MACADDR等信息获取的底层原理...
  15. 使用OpenResty搭建高性能服务端
  16. Python-OpenCV——Image inverting
  17. react引入html2canvas和jspdf生成PDF打印及下载
  18. 戏人看戏,苏旭博客网-学无止尽
  19. 2018届android校招面试总结:百度,大疆,乐视,知乎
  20. Spring Boot 核心注解?主要由哪几个注解组成?

热门文章

  1. 数字经济时代,软件企业的出路在哪里?
  2. 高速缓冲存储器Cache
  3. xp系统提示itunes无法验证服务器,我XP系统安装itunes时,一直提示“无法访问windows installer服务.....”...
  4. java用arraylist求和_Java中ArrayList的使用
  5. javascript 面向对象(实现继承的几种方式)
  6. AI艺术系列 | 02:亚洲美女图鉴赏析
  7. android编译v8引擎,V8引擎 Android库构建
  8. runwith注解为什么用不了_企鹅电竞首充6元礼包|企鹅体育为什么发言不了?企鹅体育为啥用WiFi不能看?...
  9. 智能微电网研究(PythonMatlab代码实现)
  10. NASA成立寻找外星人小组,三全水饺回应猪瘟,微波炉+葡萄=爆炸,94年故宫首次晚间开放,这就是今天的大新闻!...