当前位置: 首页 > news >正文

爬虫详细教程第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 是利用深度学习和大数据训练的人工智能系统,专门 设计来理解、生成和回应自然语言。 大模型训练平台和工具提供了强大且灵活的基础设施,使得开发和训练复杂的语言模型变得可行且高效。 平台和工具提供了先进的算法、预训练模型和优化技术&#xff0c…...

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&#xff0c;Java 已经走过了漫长的道路&#xff0c;自 Java 8 以来&#xff0c;Java 生态系统…...

使用poi将pptx文件转为图片详解

目录 项目需求 后端接口实现 1、引入poi依赖 2、代码编写 1、controller 2、service层 测试出现的bug 小结 项目需求 前端需要上传pptx文件&#xff0c;后端保存为图片&#xff0c;并将图片地址保存数据库&#xff0c;最后大屏展示时显示之前上传的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 功能丰…...

从零实现STL哈希容器:unordered_map/unordered_set封装详解

本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说&#xff0c;直接开始吧&#xff01; 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...

蓝桥杯3498 01串的熵

问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798&#xff0c; 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...

企业如何增强终端安全?

在数字化转型加速的今天&#xff0c;企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机&#xff0c;到工厂里的物联网设备、智能传感器&#xff0c;这些终端构成了企业与外部世界连接的 “神经末梢”。然而&#xff0c;随着远程办公的常态化和设备接入的爆炸式…...

AI,如何重构理解、匹配与决策?

AI 时代&#xff0c;我们如何理解消费&#xff1f; 作者&#xff5c;王彬 封面&#xff5c;Unplash 人们通过信息理解世界。 曾几何时&#xff0c;PC 与移动互联网重塑了人们的购物路径&#xff1a;信息变得唾手可得&#xff0c;商品决策变得高度依赖内容。 但 AI 时代的来…...

uniapp 字符包含的相关方法

在uniapp中&#xff0c;如果你想检查一个字符串是否包含另一个子字符串&#xff0c;你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的&#xff0c;但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...

比较数据迁移后MySQL数据库和OceanBase数据仓库中的表

设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...

PostgreSQL——环境搭建

一、Linux # 安装 PostgreSQL 15 仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装之前先确认是否已经存在PostgreSQL rpm -qa | grep postgres# 如果存在&#xff0…...

算法打卡第18天

从中序与后序遍历序列构造二叉树 (力扣106题) 给定两个整数数组 inorder 和 postorder &#xff0c;其中 inorder 是二叉树的中序遍历&#xff0c; postorder 是同一棵树的后序遍历&#xff0c;请你构造并返回这颗 二叉树 。 示例 1: 输入&#xff1a;inorder [9,3,15,20,7…...

Visual Studio Code 扩展

Visual Studio Code 扩展 change-case 大小写转换EmmyLua for VSCode 调试插件Bookmarks 书签 change-case 大小写转换 https://marketplace.visualstudio.com/items?itemNamewmaurer.change-case 选中单词后&#xff0c;命令 changeCase.commands 可预览转换效果 EmmyLua…...

论文阅读:Matting by Generation

今天介绍一篇关于 matting 抠图的文章&#xff0c;抠图也算是计算机视觉里面非常经典的一个任务了。从早期的经典算法到如今的深度学习算法&#xff0c;已经有很多的工作和这个任务相关。这两年 diffusion 模型很火&#xff0c;大家又开始用 diffusion 模型做各种 CV 任务了&am…...