爬虫相关介绍

爬虫的本质就是模拟客户端请求获取服务端数据

无法爬取到想要的数据,因为爬虫模拟的力度不够

  • 通用爬虫:将一个页面中所有的数据都爬取到

  • 聚焦爬虫:建立于通用爬虫之上,针对指定数据爬取(如:图片,标题等)

  • 增量式爬虫:监控网站更新情况,爬取最新的数据


案例应用

需用到requests 模块可通过 :pip install requests 进行下载


东方财富首页数据爬取

  1. 通过数据包分析可很轻松的找到的大多数数据存在的数据包,其余的请求可发现都是请求的图片或其他格式

  2. 分析此数据包的请求信息,数据包为网站的默认根路径请求方式为GET (也就是说我们只需要构建一个GET 请求包访问根路径即可)

  3. 使用requests 模块进行get 方式请求发送

    import requests
    #1.指定服务器url
    url = "https://www.eastmoney.com/" #2.发送请求:根据指定url发送get 请求,得到响应对象
    response = requests.get(url) # 3. 查看响应状态码
    print(response.status_code) # 得到响应状态码
    200 # 设置获取响应数据的编码格式
    response.encoding='utf-8' #4.获取字符串形式的响应数据
    data=response.text #5.持久化存储,响应数据存储于caifu.html
    with open ('caifu.html','w',encoding='utf-8') as f:
    f.write(data)
  4. 获取到此响应包数据(这里由于响应包为html 格式所以存储同样为html)


爬取51游戏中任何游戏对应的搜索结果页面数据


  1. 首页存在游戏搜索功能,进行搜索的话会新发起新请求

  2. 可采用开发者工具进行分析,若对于HTTP 协议较熟悉的话,可直接分析确认为GET 请求参数为"传奇"

  3. 逻辑分析完成,进行爬虫代码块编写

    import requests
    # 用于动态请求参数的指定
    game_name = input("请输入游戏关键字")
    url = 'https://game.51.com/search/action/game/'
    # 构建字典,用于指定发送参数,
    p = {
    'q':game_name
    }
    # 发起get 请求,指定发送参数为q字典中的参数
    response = requests.get(url,parmes=p)
    page_html = response.text
    with open(f"{game_name}.html",'w',encoding='utf-8') as f:
    f.wirte(page_html)
  4. 成功获取到相应的html 页面


中国人事考试网爬取[UA伪装]

  • http://www.cpta.com.cn/

    UA(User-Agent) 头 :HTTP 协议请求头的一个头部字段,其作用是告知服务器当前浏览器、系统等信息,服务器可针对UA提供服务

    反爬机制采用各种手段,用来检测爬虫程序,并拒绝为其提供服务,其中就存在典型的UA 头检测requests库默认会使用自己的UA

    反反爬机制绕过服务器检测的各种手段,进行数据爬出


  1. 爬取方式与第一个案例方法一致,这里就不过多赘述了,这里只做差异的演示 ,这里采用无任何反反爬机制的爬取

    import requests
    url = " http://www.cpta.com.cn"
    response = requests.get(url)
    data = response.text
    with open('人事考试.html','w',encoding='utf-8') as f:
    f.write(data)
  2. 最终爬取下来的页面内容为,进行分析,推测后端服务器的WAF 规则库存在UA 头的检测

    • WAF 应用防火墙): 一种恶意请求的检测手段

  1. 进行UA 头伪造,反反爬对方的爬虫检测

    import requests
    url = " http://www.cpta.com.cn"
    # 指定请求头字段中的UA
    h={
    "user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36 Edg/139.0.0.0"
    }
    # 指定get请求,且指定请求头为h 字典中字段,发送请求
    response = requests.get(url,headers=h)
    data = response.text
    with open('人事考试.html','w',encoding='utf-8') as f:
    f.write(data)
  2. 反反爬绕过成功,成功爬取下首页数据(但目前该网站似乎进行了规则库的更新,仅仅UA 头伪造无法绕过)


中国人事考试网(站内搜索post + 请求参数)

  1. 进行数据包的分析,分析为POST 请求请求体参数为 keywords + 固定搜索参数

  2. 进行数据包构造,keywords 可为变量,爬取指定内容

    keyword={
    keywords:变量
    "搜 索":"搜 索"
    }
  3. 构思完成,进行爬虫代码编写

    import requests
    url = 'http://www.cpta.com.cn/category/search'
    keyword = input('请输入:')
    # 构建指定UA 头,绕过反爬
    h={
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36"
    }
    # 构建请求体
    d={
    "keywords":keyword,
    "搜 索":"搜 索"
    }
    # 以post 请求发送参数和指定请求头
    response = request.post(url,header=h,data=p)
    # 持久化存储
    with open(f'{keyword}.html','w',encoding='utf-8') as f:
    f.write(response.text)
  4. 爬取成功


智慧职教(动态加载数据爬取)(重点)
  • https://www.icve.com.cn/search

    动态加载数据:不是通过单一数据包进行页面渲染,也就无法进行一个数据包爬完数据了

    需求分析:获取到教师姓名、来源学校、课程热度、


  1. 数据包获取,无法快速定位爬取的数据包? 可用到开发者工具搜索关键字找到需求数据包

  2. 数据包分析:GET方式请求,通过pagenum 参数判断返回页,响应包为序列化后的JSON 数据(后端应该是以先加载框架,后加载数据的方式将两者分离了出来)

  1. 编写爬虫代码,需接受格式为JSON 数据,这里已经成功获取到值,接下来进行筛选和持久化存储即可

    import requests
    # 可定义爬出页面
    url = "https://www.icve.com.cn/prod-api/homePage/zykCourseList?pageSize=16&pageNum=1"
    # 定义UA头和Referer
    headers={
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36 Edg/139.0.0.0",
    "Referer":"https://www.icve.com.cn/search"
    }
    # 发送请求包并以json 形式接受响应包
    response=requests.get(url,headers=headers)
    json_data=response.json()
    print(json_data)

  1. 这里分析,响应包为嵌套于rows 列表中的每个字典

  1. 编写筛选代码

    # 进行数据筛选
    for i in json_data["rows"]:
    data=f"教师姓名:{i["teacherName"]},学校:{i["schoolName"]},热度:{i["studentNum"]}"
    # 进行数据持久存储
    with open('智慧.cvs','a+',encoding='utf-8') as f:
    f.write(f"{data}\n")
    f.close
    print("爬取完毕")

  1. 这里还可以再根据GET 请求中**pageNum **或 pageSize 参数进行多页爬取,步骤于之前实例的步骤一致修改,指定parmes 即可,这里不做演示了

图片数据爬取
  1. response.text 接受数据为字符串形式

  2. response.json() 接受数据为 json 格式*数据

  3. response.content 接受数据为二进制形式,如视频、音频、压缩包等


图片爬取仅需注意接受数据时为content接受二进制即可

import requests
url = 'https://ts1.tc.mm.bing.net/th/id/R-C.a22ba862dc4024396921dee05c16b698?rik=j6jky8wC6ZrBUQ&riu=http%3a%2f%2fpic.baike.soso.com%2fp%2f20100127%2fbki-20100127214000-1068687119.jpg&ehk=8f8CTwGTqQyZY0AuFfHuo41VxikBPGpKPafik0dKVfA%3d&risl=&pid=ImgRaw&r=0'
respons = requests.get(url)
# 二进制形式接受图片
img = respons.content
# 二进制形式写入jpeg 图片中
with open("pikachu.jpeg",'wb') as f:
f.write(img)


爬虫-Day1的更多相关文章

  1. python网络爬虫day1

    python爬虫真的很方便,自己不能忽视的问题就是字符编码的问题,一直想腾出时间来看,一直没有时间.明天开始看吧. 今天是学习python爬虫的第一天,从B站上搜到的,可惜可惜. import req ...

  2. Scrapy爬虫day1——环境配置

    安装 Scrapy pip install scrapy 配置虚拟环境 mkvirtualenv Spider 创建项目 在Spider的虚拟环境中运行 scrapy startproject Boo ...

  3. day1 UnicodeEncodeError: 'gbk' codec can't encode character '\xa0' in position 2490: illegal multibyte sequence 错误提示

    get方式得到网页的信息 #coding=utf-8 #pip install requests #直接get到网页的信息 import requests from bs4 import Beauti ...

  4. 商业爬虫学习笔记day1

    day1 一. HTTP 1.介绍: https://www.cnblogs.com/vamei/archive/2013/05/11/3069788.html http://blog.csdn.ne ...

  5. python网络爬虫与信息提取 学习笔记day1

    Day1: 安装python之后,为其配置requests第三方库,并爬取百度主页内容. 语句解释: r.status_code检测请求的状态码,如果状态码为200,则说明访问成功,否则,则说明访问失 ...

  6. Python爬虫学习 - day1 - 爬取图片

    利用Python完成简单的图片爬取 最近学习到了爬虫,瞬时觉得很高大上,想取什么就取什么,感觉要上天.这里分享一个简单的爬取汽车之家文章列表的图片教程,供大家学习. 需要的知识点储备 本次爬虫脚本依赖 ...

  7. 爬虫抓取5大门户网站和电商数据day1:基础环境搭建

    最新想用爬虫实现抓取五大门户网站(搜狐.新浪.网易.腾讯.凤凰网)和电商数据(天猫,京东,聚美等), 今天第一天先搭建下环境和测试. 采用maven+xpath+ HttpClient+正则表达式. ...

  8. 爬虫初窥day1:urllib

    模拟“豆瓣”网站的用户登录 # coding:utf-8 import urllib url = 'https://www.douban.com/' data = urllib.parse.urlen ...

  9. 爬虫学习--Urllib库基本使用 Day1

    一.Urllib库详解 1.什么是Urllib Python内置的HTTP请求库 urllib.request    请求模块(模拟实现传入网址访问) urllib.error             ...

  10. Day1 - Python基础1 介绍、基本语法、流程控制

    Python之路,Day1 - Python基础1   本节内容 Python介绍 发展史 Python 2 or 3? 安装 Hello World程序 变量 用户输入 模块初识 .pyc是个什么鬼 ...

随机推荐

  1. AES加密及AES解密在线工具-九五小庞

    访问地址:https://tool.lvtao.net/aes

  2. Win11专业版电脑开机音效如何设置的问题

    不少电脑基地的小伙伴都下载安装了win11专业版这款系统,也有不少细心的小伙伴发现了win11电脑开机音效变了,但是新的音效听起来非常的不舒服,怎么设置其他声音呢?下面技术员小编就来分享具体的解决方法 ...

  3. 时间复杂度O(n)查找最小覆盖子串

    题目:给你一个字符串 s .一个字符串 t .返回 s 中涵盖 t 所有字符的最小子串.如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 "" . 输入:s = &quo ...

  4. Flutter3-MacOS桌面OS系统|flutter3.32+window_manager客户端OS模板

    原创flutter3.32+dart3.8+window_manager桌面OS解决方案Flutter3MacOS. flutter3_macos最新研发flutter3.32+dart3.8+get ...

  5. AX-MES生产制造管理系统-总览

    前言 说起 MES 就不得不说 ERP,但是 ERP 大家基本上都知道,MES 就不一定了,常见的 ERP 系统包括 SAP.金蝶.用友等,ERP的流程相对来说也比较统一:MES就不同了,基本上熟悉业 ...

  6. SeaTunnel的搭建部署以及测试

    SeaTunnel(原Waterdrop)是一款高性能.易扩展的分布式数据集成平台,支持实时和批量数据处理.以下为 SeaTunnel v3.x 的安装及测试全流程指南: 一.安装准备 1. 环境要求 ...

  7. 为什么用ThreadLocalMap而不使用Session

    数据隔离与线程安全 ThreadLocalMap:它为每个线程提供独立的存储空间,确保不同线程间的数据相互隔离,避免了多线程环境下的并发访问问题,无需额外的同步操作就能保证线程安全.比如在处理多个用户 ...

  8. 3D Gaussian splatting 08: 部署模型网页展示

    目录 3D Gaussian splatting 01: 环境搭建 3D Gaussian splatting 02: 快速评估 3D Gaussian splatting 03: 用户数据训练 3D ...

  9. Mac上使用Docker Desktop启动Kubernetes

    正常启动会一直显示 starting,无法启动成功 主要是因为启动所需要的镜像无法正常下载成功 下图为 k8s 所需要的镜像 下载镜像 将仓库克隆下来: git clone https://githu ...

  10. FFMPEG采集摄像头推流方法说明

    命令 ffmpeg -list_devices true -f dshow -i dummy #获取摄像头名称 ffmpeg -f dshow -i video="获取的摄像头的名称&quo ...