爬虫详细教程第1天
爬虫详细教程第一天
- 1.爬虫概述
- 1.1什么是爬虫?
- 1.2爬虫工具——Python
- 1.3爬虫合法吗?
- 1.4爬虫的矛与盾
- 1.4.1反爬机制
- 1.4.2反爬策略
- 1.4.3robots.txt协议
- 2.爬虫使用的软件
- 2.1使用的开发工具:
- 3.第一个爬虫
- 4.web请求
- 4.1讲解一下web请求的全部过程
- 4.2页面渲染数据
- 4.2.1. 服务器渲染
- 4.2.2. 前端JS渲染
- 5.HTTP协议
- 5.1请求:
- 5.2响应:
- 5.3请求方式
- 6.requests模块
- 6.1. 抓取百度翻译数据
- 6.2: 抓取豆瓣电影
各位小伙伴想要博客相关资料的话,关注公众号:chuanyeTry即可领取相关资料!
1.爬虫概述
1.1什么是爬虫?
爬虫就是通过编写程序来爬取互联网上的优秀资源(图片、音频、视频、数据)
1.2爬虫工具——Python
Python上手速度最快,语法最简单。更重要的是,有非常多的关于爬虫功能的第三方支持库。
1.3爬虫合法吗?
爬虫在法律上是不被禁止的。这就是法律是允许爬虫存在的。
但是爬虫不能影响网站的正常运营(抢票, 秒杀, 疯狂solo网站资源
造成网站宕机)。我们还是要安分守己。时常优化自己的爬虫程序
避免干扰网站的正常运行。并且在使用爬取到的数据时,发现涉及
对用户隐私和商业机密等敏感内容时,一定要及时终止爬取和传播
1.4爬虫的矛与盾
1.4.1反爬机制
网站可以通过制定相应的策略或者技术手段,防止爬虫程序进行网站数据的爬取。
1.4.2反爬策略
爬虫程序可以通过制定相关的策略或者技术手段,破解网站中配备的反爬机制,从而可以获取⻔户网站中相关的数据据。
1.4.3robots.txt协议
robots.txt协议:规定了网站中哪些数据可以被爬虫爬取哪些数据不可以被爬取。

2.爬虫使用的软件
2.1使用的开发工具:
- python 3.8 (尽量不要用最新版的python)
- pycharm
3.第一个爬虫
首先,回顾一下爬虫的概念. 爬虫就是我们通过我们写的程序去抓取互联网上的数据资源. 比如, 需要百度的资源.我们打开浏览器, 然后输入百度的网址,紧接着, 我们就能在浏览器上看到百度的内容了. 那换成爬虫呢? 其实道理是一样的. 只不过, 我们需要用代码来模拟一个浏览器, 然后同样的输入百度的网址. 那么我们的程序应该也能拿到百度的内容.
#在python中, 我们可以直接用urllib模块来完成对浏览器的模拟工作~,
from urllib.request import urlopen
resp = urlopen("http://www.baidu.com") # 打开百度
print(resp.read().decode("utf-8")) # 打印抓取到的内容
resp.close#关闭文档
我们可以把抓取到的html内容全部写入到文件中, 然后和原版的百度
进行对比, 看看是否一致
from urllib.request import urlopen
resp = urlopen("http://www.baidu.com") # 打开百度
#print(resp.read().decode("utf-8")) # 打印抓取到
的内容
with open("baidu.html",mode="w", encoding="utf-8") as f: # 创建文件
f.write(resp.read().decode("utf-8")) # 保存在文件中
resp.close#关闭文档
4.web请求
4.1讲解一下web请求的全部过程
以百度为例. 在访问百度的时候, 浏览器会把这一次请求发送到百度的服务器(百度的一台电脑), 由服务器接收到这个请求, 然后加载一些数据. 返回给浏览器, 再由浏览器进行显示. 这里蕴含着一个极为重要的东⻄在里面, 注意, 百度的服务器返回给浏览器的不直接是⻚面, 而是⻚面源代码(由html, css, js组成). 由浏览器把⻚面源代码进行执行, 然后把执行之后的结果展示
给用户. 所以我们能看到页面的内容中,我们拿到的是百度的源代码具体过程如图.

4.2页面渲染数据
并非所有的数据都在⻚面源代码里,一个新的概念那就是⻚面渲染数据的过程, 我们常⻅的⻚面渲染过程有两种,
4.2.1. 服务器渲染
在请求到服务器的时候, 服务器直接把数据全部写入到html中, 我们浏览器就能直接拿到带有数据的html内容.
这种网⻚一般都相对比较容易就能抓取到⻚面内容.
4.2.2. 前端JS渲染
第一次请求服务器返回一堆HTML框架结构. 然后再次请求到真正保存数据的服务器, 由这个服务器返回数据, 最后在浏览器上对数据进行加载.
这样做的好处是服务器那边能缓解压力. 而且分工明确. 比较容
易维护.
那数据是何时加载进来的呢?
我们进行⻚面向下滚动的时候, jd就在偷偷的加载数据了, 此时想要看到这个⻚面的加载全过程, 我们就需要借助浏览器的调试工具了(F12)
5.HTTP协议
-
协议: 就是两个计算机之间为了能够流畅的进行沟通而设置的一个君子协定. 常⻅的协议有TCP/IP. SOAP协议, HTTP协议, SMTP协议等
-
HTTP协议, Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议. 就是浏览器和服务器之间的数据交互遵守的就是HTTP协议.
HTTP协议把一条消息分为三大块内容. 无论是请求还是响应都是三
块内容
5.1请求:
请求行 -> 请求方式(get/post) 请求url地址 协议
请求头 -> 放一些服务器要使用的附加信息
请求体 -> 一般放一些请求参数
5.2响应:
状态行 -> 协议 状态码
响应头 -> 放一些客户端要使用的一些附加信息
响应体 -> 服务器返回的真正客户端要用的内容(HTML,json)等
请求头中最常⻅的一些重要内容(爬虫需要):
- User-Agent : 请求载体的身份标识(用啥发送的请求)
- Referer: 防盗链(这次请求是从哪个⻚面来的? 反爬会用到)
- cookie: 本地字符串数据信息(用户登录信息, 反爬的token)
响应头中一些重要的内容:
cookie: 本地字符串数据信息(用户登录信息, 反爬的token)
5.3请求方式
- GET: 显示提交
- POST: 隐示提交
6.requests模块
常用的抓取⻚面的模块通常使用第三方模块requests.既然是第三方模块, 那就需要我们对该模块进行安装, 安装方法:
pip install requests
6.1. 抓取百度翻译数据
kw = input("请输入你要翻译的英语单词:")
dic = {
"kw": kw # 这里要和抓包工具里的参数一致.
}
resp =
requests.post("https://fanyi.baidu.com/sug",
data=dic)
#返回值是json 那就可以直接解析成json
resp_json = resp.json()
#{"errno': 0, 'data': [{'k': 'Apple', 'v': 'n.苹果公司,原称苹果电脑公司'....
print(resp_json['data'][ 0 ]['v']) # 拿到返回字典中的内容
resp.close

6.2: 抓取豆瓣电影
url = 'https://movie.douban.com/j/chart/top_list'
param = {
'type': '24',
'interval_id': '100:90',
'action':'',
'start': '0',#从库中的第几部电影去取
'limit': '20',#一次取出的个数
}
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel
Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like
Gecko) Chrome/72.0.3626.121 Safari/537.36'
}
response =
requests.get(url=url,params=param,headers=headers
)
list_data = response.json()
fp = open('./douban.json','w',encoding='utf-8')
json.dump(list_data,fp=fp,ensure_ascii=False)
print('over!!!')
response.close
相关文章:
爬虫详细教程第1天
爬虫详细教程第一天 1.爬虫概述1.1什么是爬虫?1.2爬虫工具——Python1.3爬虫合法吗?1.4爬虫的矛与盾1.4.1反爬机制1.4.2反爬策略1.4.3robots.txt协议 2.爬虫使用的软件2.1使用的开发工具: 3.第一个爬虫4.web请求4.1讲解一下web请求的全部过程4.2页面渲染…...
[Linux] MySQL数据库的备份与恢复
一、数据库备份的分类和备份策略 1.1 数据库备份的分类 1)物理备份 物理备份:对数据库操作系统的物理文件(如数据文件、日志文件等)的备份。 物理备份方法: 冷备份(脱机备份) :是在关闭数据库的时候进…...
Django、Python版本升级问题大汇总
Django3.0升级到4.1,Python3.8升级到3.11.6问题大汇总 报错1:ERROR: Could not build wheels for cffi, uWSGI, which is required to install pyproject.toml-based projects ERROR: Could not build wheels for cffi, uWSGI, which is required to install pyproject.tom…...
2023-12-30 AIGC-LangChain介绍
摘要: 2023-12-30 AIGC-LangChain介绍 LangChain介绍 1. https://youtu.be/Ix9WIZpArm0?t353 2. https://www.freecodecamp.org/news/langchain-how-to-create-custom-knowledge-chatbots/ 3. https://www.pinecone.io/learn/langchain-conversational-memory/ 4. https://de…...
pytorch01:概念、张量操作、线性回归与逻辑回归
目录 一、pytorch介绍1.1pytorch简介1.2发展历史1.3pytorch优点 二、张量简介与创建2.1什么是张量?2.2Tensor与Variable2.3张量的创建2.3.1 直接创建torch.tensor()2.3.2 从numpy创建tensor 2.4根据数值创建2.4.1 torch.zeros()2.4.2 torch.zeros_like()2.4.3 torch…...
storyBook play学习
场景 在官方给出的案例中, Page.stories.js import { within, userEvent } from storybook/testing-library import MyPage from ./Page.vueexport default {title: Example/Page,component: MyPage,parameters: {// More on how to position stories at: https:/…...
Android Matrix画布Canvas旋转Rotate,Kotlin
Android Matrix画布Canvas旋转Rotate,Kotlin private fun f1() {val originBmp BitmapFactory.decodeResource(resources, R.mipmap.pic).copy(Bitmap.Config.ARGB_8888, true)val newBmp Bitmap.createBitmap(originBmp.width, originBmp.height, Bitmap.Config.…...
私有部署ELK,搭建自己的日志中心(三)-- Logstash的安装与使用
一、部署ELK 上文把采集端filebeat如何使用介绍完,现在随着数据的链路,继续~~ 同样,使用docker-compose部署: version: "3" services:elasticsearch:container_name: elasticsearchimage: elastic/elasticsearch:7.9…...
2023就这样过去了,2024会更好吗?
2023年,不是很好 2023年是疫情后的第一年,疫情过去了,大家都有大多的希望,希望经济可以恢复,希望信心可以恢复,但是整体都是远远低于预期的。年初的一片热潮,年中的一片哀嚎,年底基…...
SpringBoot加载配置的6种方式
从配置文件中获取属性应该是SpringBoot开发中最为常用的功能之一,简单回顾一下这六种的使用方式: 说明Environment对象Environment是springboot核心的环境配置接口,它提供了简单的方法来访问应用程序属性,包括系统属性、操作系统…...
大语言模型(LLM)训练平台与工具
LLM 是利用深度学习和大数据训练的人工智能系统,专门 设计来理解、生成和回应自然语言。 大模型训练平台和工具提供了强大且灵活的基础设施,使得开发和训练复杂的语言模型变得可行且高效。 平台和工具提供了先进的算法、预训练模型和优化技术,…...
docker配置buildx插件
一、介绍 Docker buildx是docker的一个插件 支持Moby BuildKit的所有特性 可以跨CPU架构编译镜像 可以在多节点编译镜像 二、前提 使用 buildx 作为 docker CLI 插件需要使用 Docker 19.03 或更新版本。 三、配置步骤 1)客户端:在客户端的配置文…...
mysql 空间函数
ST_GeomFromText:将文本表示的几何对象转换为几何对象。 SELECT ST_GeomFromText(POINT(1 1)); ST_AsText:将几何对象转换为文本表示。 SELECT ST_AsText(ST_GeomFromText(POINT(1 1))); ST_Contains:判断一个几何对象是否包含另一个几何对象…...
vscode调试 反汇编c/c++ 查看汇编代码gdb/lldb
先看下流程! 先看下流程! 有问题请留言! 文章目录 必备F5开启调试左侧侧边栏->确保打开回调栈右键函数栈->查看反汇编 方法二:手动输入命令查看 必备 使用c/c 插件,这应该是必备的。 F5开启调试 左侧侧边栏-&…...
总结项目中oauth2模块的配置流程及实际业务oauth2认证记录(Spring Security)
文章目录 简单示例添加oauth2的依赖配置认证服务器配置资源服务器配置安全使用http或者curl命令测试 实际业务中工具类(记录):认证服务器资源服务器、配置安全用户验证登录控制层配置文件application.yml 项目中用过的spring security&#x…...
传感器原理与应用复习
测量与误差 传感器原理与应用复习—测量概述与测量误差 传感器特性与应变式传感器 传感器原理与应用复习–传感器基本特性与应变式传感器 电感式传感器 传感器原理与应用复习–电感式传感器 电容式与电压式传感器 传感器原理与应用复习–电容式与压电式传感器 电磁式与…...
蓝桥杯python比赛历届真题99道经典练习题 (8-12)
【程序8】 题目:输出9*9口诀。 1.程序分析:分行与列考虑,共9行9列,i控制行,j控制列。 2.程序源代码: #include "stdio.h" main() {int i,j,result;printf("\n");for (i=1;i<10;i++){ for(j=1;j<10;j++){result=i*j;printf("%d*%d=%-3…...
八个理由:从java8升级到Java17
目录 前言 1. 局部变量类型推断 2.switch表达式 3.文本块 4.Records 5.模式匹配instanceof 6. 密封类 7. HttpClient 8.性能和内存管理能力提高 前言 从Java 8 到 Java 20,Java 已经走过了漫长的道路,自 Java 8 以来,Java 生态系统…...
使用poi将pptx文件转为图片详解
目录 项目需求 后端接口实现 1、引入poi依赖 2、代码编写 1、controller 2、service层 测试出现的bug 小结 项目需求 前端需要上传pptx文件,后端保存为图片,并将图片地址保存数据库,最后大屏展示时显示之前上传的pptx的图片。需求看上…...
【微服务】springboot整合skywalking使用详解
目录 一、前言 二、SkyWalking介绍 2.1 SkyWalking是什么 2.2 SkyWalking核心功能 2.3 SkyWalking整体架构 2.4 SkyWalking主要工作流程 三、为什么选择SkyWalking 3.1 业务背景 3.2 常见监控工具对比 3.3 为什么选择SkyWalking 3.3.1 代码侵入性极低 3.3.2 功能丰…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...
Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...
LeetCode - 394. 字符串解码
题目 394. 字符串解码 - 力扣(LeetCode) 思路 使用两个栈:一个存储重复次数,一个存储字符串 遍历输入字符串: 数字处理:遇到数字时,累积计算重复次数左括号处理:保存当前状态&a…...
MySQL 8.0 OCP 英文题库解析(十三)
Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...
【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)
骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术,它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton):由层级结构的骨头组成,类似于人体骨骼蒙皮 (Mesh Skinning):将模型网格顶点绑定到骨骼上,使骨骼移动…...
VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP
编辑-虚拟网络编辑器-更改设置 选择桥接模式,然后找到相应的网卡(可以查看自己本机的网络连接) windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置,选择刚才配置的桥接模式 静态ip设置: 我用的ubuntu24桌…...
JVM 内存结构 详解
内存结构 运行时数据区: Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器: 线程私有,程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 每个线程都有一个程序计数…...
无人机侦测与反制技术的进展与应用
国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机(无人驾驶飞行器,UAV)技术的快速发展,其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统,无人机的“黑飞”&…...
NPOI操作EXCEL文件 ——CAD C# 二次开发
缺点:dll.版本容易加载错误。CAD加载插件时,没有加载所有类库。插件运行过程中用到某个类库,会从CAD的安装目录找,找不到就报错了。 【方案2】让CAD在加载过程中把类库加载到内存 【方案3】是发现缺少了哪个库,就用插件程序加载进…...
CVPR2025重磅突破:AnomalyAny框架实现单样本生成逼真异常数据,破解视觉检测瓶颈!
本文介绍了一种名为AnomalyAny的创新框架,该方法利用Stable Diffusion的强大生成能力,仅需单个正常样本和文本描述,即可生成逼真且多样化的异常样本,有效解决了视觉异常检测中异常样本稀缺的难题,为工业质检、医疗影像…...
