爬虫快速入门

爬虫基础入门

  • 爬虫原理
    • 1. HTTP协议与WEB开发
      • 1.简介
      • 2.请求协议与响应协议
      • 3.请求方式: get与post请求
        • 区分1
        • 区分2
  • 环境准备
    • 1.安装python环境
    • 2.安装requests库
      • 安装方式
        • 验证安装成功
  • 三种反爬机制
    • 1.UA反爬
    • 2.referer反爬
    • 3.cookie反爬
  • 请求参数
    • get请求以及查询参数
    • post请求以及请求体参数
  • 爬取图片视频
    • (1)直接爬取媒体数据流
    • (2)批量爬取数据![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/749eb5d6263d482fa52d955beb974962.png#pic_center)

爬虫原理

1. HTTP协议与WEB开发

1.简介

HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于万维网(WWW:World Wide Web )服务器与本地浏览器之间传输超文本的传送协议。
浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。Web服务器根据接收到的请求后,向客户端发送响应信息。
在这里插入图片描述

2.请求协议与响应协议

1.http协议包含由浏览器发送数据到服务器需要遵循的请求协议与服务器发送数据到浏览器需要遵循的请求协议。
2.用于HTTP协议交互的信被为HTTP报文。
3.请求端(客户端)的HTTP报文 做请求报文,响应端(服务器端)的 做响应报文。HTTP报文本身是由多行数据构成的字文本。

一个完整的URL包括:协议、ip、端口、路径、参数  
URL:https  ://  www.baidu.com   /s                    ?    wd=alex
           协议  ://  域名(端口)           /路径/xxx/yyy   ?   查询参数

其中https是协议,www.baidu.com 是IP,端口默认80(可以不写),/s是路径,参数是wd=alex

在这里插入图片描述

3.请求方式: get与post请求

区分1
  • GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,
	EditBook?name=test1&id=123456.
  • POST方法是把提交的数据放在HTTP包的请求体中(通常不显示出来).
区分2
  • GET提交的数据大小有限制(因为浏览器对URL的长度有限制)
  • POST方法提交的数据没有限制

响应状态码:当客户端向服务器端发送请求时, 返回的请求结果。借助状态码,用户可以知道服务器端是正常 理了请求,还是出现了 。状态码如200 OK,以3位数字和原因组成。

环境准备

1.安装python环境

通过下面的链接: 7天速成Python——第一天安装python环境

2.安装requests库

Python requests 是一个常用的 HTTP 请求库,可以方便地向网站发送 HTTP 请求,并获取响应结果。

安装方式

打开终端或者cmd,在里面输入以下指令并回车

pip install requests

在这里插入图片描述

验证安装成功

在终端中先输入python,然后输入import requests,出现以下则安装成功。
在这里插入图片描述

三种反爬机制

1.UA反爬

百度热搜
在这里插入图片描述
在这里插入图片描述
首先右击空白处,选择查看网页源代码,点击1,清空当前内容,点击2(network),然后选择fetch/XHR ,然后点击3(刷新),选择下图信息
在这里插入图片描述
然后点击4(headers),将5(User-Agent)复制加进下面代码中。

  • User-Agent为百度服务器用于反爬的凭证,将其加入headers向百度服务器发请求,并将请求结果res以"w"的形式写入baidu.html中
import requests#引入requests库

headers = {
  "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36",
}

res = requests.get(
 "https://www.baidu.com/",#请求百度首页
  headers=headers
)

#解析数据
with open("baidu.html", "w") as f:
#在当前路径下,以写的方式打开一个名为'url.txt',如果不存在则创建
    f.write(res.text)

2.referer反爬

豆瓣电影
在这里插入图片描述
在这里插入图片描述
首先右击空白处,选择查看网页源代码,点击1,清空当前内容,点击2(network),然后点击3(fetch/XHR),然后点击4(刷新),点击5(包含网页信息的文件),点击6(响应)

  • Referer和User-Agent为豆瓣服务器用于反爬的凭证,将其加入headers向豆瓣服务器发请求,并将请求结果res打印出来
import requests
    
headers = {
        "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36",
        "Referer": "https://movie.douban.com/explore",
    }
    
res = requests.get(
  "https://m.douban.com/rexxar/api/v2/movie/recommend?refresh=0&start=0&count=20&selected_categories=%7B%7D&uncollect=false&tags=",
  headers=headers
)
    
#解析数据
 print(res.text)

3.cookie反爬

雪球股票
在这里插入图片描述
在这里插入图片描述
首先右击空白处,选择查看网页源代码,点击1,清空当前内容,点击2(network),然后点击3(fetch/XHR),然后点击4(刷新),点击5(包含网页信息的文件),点击6(header),将7(cookie)复制

  • Referer,cookie,User-Agent为雪球服务器用于反爬的凭证,将其加入headers向雪球服务器发请求,并将请求结果res打印出来
    import requests
    url = "https://stock.xueqiu.com/v5/stock/screener/quote/list.json?page=1&size=30&order=desc&orderby=percent&order_by=percent&market=CN&type=sh_sz"
    cookie = 'xq_a_token=a0f5e0d91bc0846f43452e89ae79e08167c42068; xqat=a0f5e0d91bc0846f43452e89ae79e08167c42068; xq_r_token=76ed99965d5bffa08531a6a47501f096f61108e8; xq_id_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJ1aWQiOi0xLCJpc3MiOiJ1YyIsImV4cCI6MTY5NTUxNTc5NCwiY3RtIjoxNjkzMjAzODIzMzAwLCJjaWQiOiJkOWQwbjRBWnVwIn0.MCIGGTGaSPe9nVuXkyrXQTlCthdURSnDtqm8dGttO2XYHeaMPSKmHQvsJmbw3OJTRnkf0KHZvgF0W3Rv-9uYe4P2Wizt0g2QzQonONjUmExABmZX0e3ara8BzBQ3b96H7dm0LV4pdBlnOW0A9PUmGRouWM7kVUOGPvd3X7GkB7M_th8pV8SZo9Iz4nzjrwQzxPBa0DlS7whbeNeXMnbnmAPp7z-eG75vdE2Pb3OyZ5Gv-FINhpQtAWo95lTxZVw5C5VHSzbR_-z8uqH6DD0xop4_wvKw5LIVwu6ZZ6TUnNFr3zGU9jWqAGgdzcKgO38dlL6uXNixa9mrKOd1OZnDig; cookiesu=431693203848858; u=431693203848858; Hm_lvt_1db88642e346389874251b5a1eded6e3=1693203851; device_id=7971eba10048692a91d87e3dad9eb9ca; s=bv11kb1wna; Hm_lpvt_1db88642e346389874251b5a1eded6e3=1693203857'
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36',
        "referer": "https://xueqiu.com/",
        "cookie": cookie,
    
    }
    res = requests.get(url, headers=headers)//get请求方式
    print(res.text)
    

请求参数

get请求以及查询参数

在这里插入图片描述

import requests
    
headers = {
   "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36",
    "Referer": "https://movie.douban.com/explore",
    }
    
res = requests.get(
   "https://m.douban.com/rexxar/api/v2/movie/recommend?refresh=0&start=0&count=20&selected_categories=%7B%7D&uncollect=false&tags=",
    headers=headers,
    # params={  # 查询
    #    "count": "20",
    #    "tags": "悬疑"
    # }
    )
#解析数据
print(res.text)

post请求以及请求体参数

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

import requests

while 1:
    wd = input("请输入翻译内容:")

    res = requests.post("https://aidemo.youdao.com/trans?", params={}, headers={},
      data={
          "q": wd,
           "from": "Auto",
           "to": "Auto"
          })
    print(res.json().get("translation")[0])

爬取图片视频

(1)直接爬取媒体数据流

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

import requests
 # (1)下载图片
url = "https://pic.netbian.com/uploads/allimg/230812/202108-16918428684ab5.jpg"
res = requests.get(url)

#解析数据
 with open("a.jpg", "wb") as f:
      f.write(res.content)
   
#(2)下载视频
url = "https://vd3.bdstatic.com/mda-nadbjpk0hnxwyndu/720p/h264_delogo/1642148105214867253/mda-nadbjpk0hnxwyndu.mp4?v_from_s=hkapp-haokan-hbe&auth_key=1693223039-0-0-e2da819f15bfb93409ce23540f3b10fa&bcevod_channel=searchbox_feed&pd=1&cr=2&cd=0&pt=3&logid=2639522172&vid=5423681428712102654&klogid=2639522172&abtest=112162_5"
res = requests.get(url)

#解析数据
 with open("美女.mp4", "wb") as f:
      f.write(res.content)

(2)批量爬取数据在这里插入图片描述

import requests
import re
import os
# (1)获取当页所有的img url
start_url = "https://pic.netbian.com/4kmeinv/"

res = requests.get(start_url)

img_url_list = re.findall("uploads/allimg/.*?.jpg", res.text)

print(img_url_list)

# (2)循环下载所有图片
for img_url in img_url_list:

  res = requests.get("https://pic.netbian.com/" + img_url)
  
  img_name = os.path.basename(img_url)
 
  with open(img_name, "wb") as f:
  
    f.write(res.content)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/261320.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【终极教程】cocos2dx-js 分批次混淆压缩js文件

​ 说明: 1> 由于我们当前游戏框架的结构是平台形式的就是一个大厅里面有若干个子游戏,所以在发布的时候得区分子游戏和大厅了解了一下 project.json 里面有一个 jsList 可以把所有放进去的js文件压缩混淆成一个大的文件但是我们游戏的子游戏非常多 这样子弄显然不合适&…

sql_lab靶场搭建以及存在的一些问题

sql_lab靶场搭建问题 首先检查小皮版本 把小皮改到5.3.29版本如果没有可以直接点击更多版本进行选择安装 当版本不对时则会暴出这种错误 SETTING UP THE DATABASE SCHEMA AND POPULATING DATA IN TABLES: Fatal error: Uncaught Error: Call to undefined function mysql_co…

如何把大容量10G的文件分享给别人?三个方法收藏备用!

如果文件过大,比如10G的文件发送起来简直问题重重,不仅费时费流量而且还很可能在发送的中途失败,这时候就需要借助一些压缩软件对文件进行压缩,下面就向大家介绍3个好用的压缩软件~ 方法一:使用嗨格式压缩大师压缩后发…

安全、效率、成本:混合云数据库管理的三重挑战!

随着业务需求的不断演变,数据在多云平台之间流动,给数据库管控带来了新的层次和复杂性。这给数据库管控带来了前所未有的挑战。企业可能面临着一系列问题,包括安全性挑战、管理复杂性、性能与效率问题、成本控制难题、缺乏统一的管理视图以及…

【hcie-cloud】【9】华为云Stack_Deploy部署工具介绍

文章目录 前言华为云Stack Deploy简介华为云Stack Deploy工具简介华为云Stack Deploy工具部署范围华为云Stack Deploy工具节点网络要求华为云Stack Deploy工具部署流程 华为云Stack Deploy功能介绍部署工具工程场景部署流程介绍创建工程 - 基本信息填写创建工程 - 基本参数选择…

jvm相关命令操作

查看jvm使用情况 jmap -heap PID 查看线程使用情况 jstack pid 查看当前线程数 jstack 21294 |grep -E (#[0-9]) -o -c 查看系统线程数 top -H top -Hp pid #查看具体的进程中的线程信息 使用 jps 命令查看配置了JVM的服务 查看某个进程JVM的GC使用情况 jstat -gc 进程…

钢销,到2027年复合年增长率为2.7%

钢铁是建筑、汽车和制造业等各个行业广泛使用的材料。由于对钢铁产品的需求不断增加,钢铁销售市场在过去几年出现了显着增长。在本次分析中,我们将审视全球钢材销售市场和中国钢材销售市场的发展趋势。全球钢材销售市场分析: 全球钢铁市场预计…

【EI会议征稿】2024年生成式人工智能与信息安全国际学术会议(GAIIS 2024)

2024年生成式人工智能与信息安全国际学术会议(GAIIS 2024) 2024 International Conference on Generative Artificial Intelligence and Information Security 2024年生成式人工智能与信息安全国际学术会议(GAIIS 2024)将于 202…

LeetCode:162. 寻找峰值、1901. 寻找峰值 II(二分 C++)

目录 162. 寻找峰值 题目描述: 实现代码与解析: 二分 原理思路: 1901. 寻找峰值 II 题目描述: 实现代码与解析: 二分 原理思路: 162. 寻找峰值 题目描述: 峰值元素是指其值严格大于左…

sqlserver同步-日志传送

文章目录 先决条件安全性配置日志传送删除日志传送 (SQL Server)显示服务器实例上的事务日志传送状态报告监视日志传送 (Transact-SQL)故障转移到日志传送辅助服务器 (SQL Server)为受控故障转移做准备故障转移检查备份的日志文件是否都传送到辅助库把辅助库的日志文件还原到辅…

如何写好接口自动化测试脚本

谈到接口测试,大家关注更多的是哪个工具更优秀,更好用。但是很少人关注到接口测试用例的设计问题,也很少人会去写接口用例,都代码化了嘛,还写什么用例,是吧? 这样真的对么?我们是不…

京东2023年度各行业数据报告-2023全年度冰箱十大热门品牌销量榜单

今年,受家电市场整体大盘下滑的影响,冰箱市场的总体产销量较上年有降幅。 根据鲸参谋电商数据分析平台的相关数据显示,2023年京东平台上冰箱市场的全年销量为1300万,同比降低约9%;销售额将近320亿,同比降低…

UNet医学图像分割网络

UNet网络结构 对于医学图像的分割任务,这里使用UNet网络实现CT影响的病灶区域分割任务。记一篇学习笔记。 1、UNet网络结构 原始图片大小为(512, 512), 根据CT数据像素值分布的特征,对于image保留[-1024, 1024]范围内的像素,并归一 化处理到…

Java 基础学习(十五)集合排序、Lambda和Stream

1 集合排序 1.1 集合排序API 1.1.1 集合排序概述 集合排序是指对一个集合中的元素按照特定规则进行重新排列,以使得集合中的元素按照预定义的顺序呈现。 在集合排序中,通常需要定义一个比较规则,这个比较规则用于决定集合中的元素在排序后…

Android App程序应用未校验签名证书——————《风险等级高》

目录 应用签名未校验风险1、检测目的2、风险等级3、检测依据4、风险描述5、检测步骤6、结果描述7、解决方案7.1、Android 检验 APK 是否签名的代码7.2、检验APK签名 8、结尾 应用签名未校验风险 1、检测目的 检测App程序启动时是否校验签名证书。 防止App的盗版率。未进行签…

jQuery实现轮播图代码

简述 一个简单的jQuery轮播图代码,首先,定义了一个slideshow-container的div容器,其中包含了所有轮播图幻灯片。每个幻灯片都包含一个mySlides的类名,并且使用CSS将其隐藏。然后,使用JavaScript代码来控制幻灯片的显示和隐藏。在showSlides()函数中,遍历所有幻灯片并将它…

JPEG文件内嵌HTML代码(JavaScript型图片马)

基础概念 0xFFD8:jpeg文件开始标志; 0xFFFE:jpeg文件注释开始标志; 0x0166:注释后紧跟的16进制数值,被选中部分长度为358字节,换算为16进制为166; 0xFFE0:标志图片内容开…

docker 部署kafka

随笔记录 目录 1. 安装zookeeper 2. 安装Kafka 2.1 拉取kafka image 2.2 查询本地docker images 2.3 查看本地 容器(docker container) 2.3.1 查看本地已启动的 docker container 2.3.2 查看所有容器的列表,包括已停止的容器。 2.4 …

Mybatis-Plus的分页语句流程保姆级分析(四)

group : com.baomidou version:3.5.2.2-SNAPSHOT 为什么要分析分页流程 因为我在使用的时候发现分页不生效,得分析一下找到原因。 问题描述: 我的分页不生效。 com.baomidou.mybatisplus.extension.plugins.pagination的Page对象。 代码如下&#x…

【数据结构】线段树算法总结(区间修改)

知识概览 线段树一般有5个操作: pushup:用子节点更新当前节点信息pushdown:把懒标记往下传build:初始化一棵树modify:修改一个区间query:查询一个区间 不带懒标记(支持单点修改)的线…