requests爬虫

news/2024/7/19 10:00:35 标签: 爬虫, python, 开发语言

目录

一、爬虫概念及分类

二、requests模块

1、网页地址内容获取

2、图片爬取

3、UA伪装

三、动态加载数据


一、爬虫概念及分类

爬虫: 通过编写代码,让其模拟浏览器上网,然后在互联网中抓取数据的过程

分类:1、通用爬虫:要求我们爬取一整张页面源码数据;

2、聚焦爬虫:要求爬取一张页面中的局部数据;

3、增量式爬虫:用来监测网站数据更新的情况,以便爬取到网站最新出来的数据

4、分布式爬虫:提高爬取效率的终极武器

二、requests模块

概念:爬虫中一个基于网络请求的模块

作用:模拟浏览器发起请求

1、网页地址内容获取

编码流程进行代码编写:1、指定url;2、发起请求;3、获取响应数据(爬取到页面的源码数据);4、持久化存储

#基础用法
import requests
#1、指定url
url='https://cn.bing.com/?scope=web&FORM=HDRSC1'
#2、发起请求get方法的返回值为相应对象
response=requests.get(url=url)
#3、获取响应数据
page_text=response.text
#4、持久化存储
with open('./bing.html','w',encoding='utf-8') as fp:
    fp.write(page_text)

2、图片爬取

#批量数据爬取  将每一张图片的地址解析出来,然后对图片地址发起请求即可
import re
import os
filepath='F:\爬虫\Imgs'
touxiang_url='https://www.woyaogexing.com/touxiang/katong/2023/1283447.html'
#requests获取地址内容
page_text=requests.get(url=touxiang_url).text
#从当前源码数据中解析出图片地址
#使用正则表达式
pattern='<li class="tx-img">.*?<img class="lazy" src="(.*?)" width=.*?</li>'
img_src_list=re.findall(pattern,page_text,re.S)
#添加‘https’获取图片地址
for src in img_src_list:
    print('获取图片地址:',src)
    #重新获取图片地址
    src='https:'+src
    #根据地址进行图片下载
    img_content=requests.get(url=src).content
    imgPath=filepath+'/'+src.split('/')[-1]
    with open(imgPath,'wb') as fp:
        fp.write(img_content)

获取图片地址: //img2.woyaogexing.com/2023/05/08/005aa3924cab87452818ef5f4a3232da.jpg
获取图片地址: //img2.woyaogexing.com/2023/05/08/22e68d0eae12c58387de3a4ab1534590.jpg
获取图片地址: //img2.woyaogexing.com/2023/05/08/12ca38f204b200f8729a0979d06759f0.jpg
获取图片地址: //img2.woyaogexing.com/2023/05/08/d5afe7d88c6edbc1d06c48076f89aa9a.jpg
获取图片地址: //img2.woyaogexing.com/2023/05/08/ef415265e4a51ad4052cac3bfa8e996f.jpg
获取图片地址: //img2.woyaogexing.com/2023/05/08/af0fbf087afcc3fa12c8fc2aa7dcac0a.jpg

3、UA伪装

异常访问请求:网站后台已经检测出该次请求不是通过浏览器而是通过爬虫程序发起

UA伪装:从抓包工具中获取某个基于浏览器请求的User-Agent值,存储在hearders参数中。在日后写爬虫程序中都默认带上UA检测操作

#图片爬取
import requests
import urllib
headers={
    'User-Agent':'XXXXX'
        }
img_url='https://img1.baidu.com/it/u=413643897,2296924942&fm=253&fmt=auto&app=138&f=JPEG?w=800&h=500'
#requests 获取
response=requests.get(url=img_url,headers=headers)
img_data=response.content  #二进制的相应数据
with open('1.jpg','wb') as fp:
    fp.write(img_data)

三、动态加载数据

1、概念:有些数据是通过非浏览器地址栏中的url请求到的数据,而是其他请求请求到的数据,那么这些通过其他请求请求到的数据就是动态加载的数据

2、如果检测是否为动态加载数据?

在当前网页中打开抓包工具,捕获到地址栏的url对应的数据包,在该数据包的response选项卡搜索想要爬取的数据,如果搜索到了结果则表示数据不是动态加载的,否则表示数据为动态加载的

3、捕捉动态加载的数据(最重要的就是知道动态数据是怎么加载进去的,地址是多少,然后使用拼接得到网页完整地址)

定位到动态加载数据对应的数据包,从该数据包中就可以提取出(1)请求的url;(2)请求方式;(3)请求携带的参数;(4)看到响应数据

import requests
headers={
    'User-Agent':'XXXXX'
        }
img_url='https://movie.douban.com/review/best/'
#requests 获取
response=requests.get(url=img_url,headers=headers)
response.encoding='utf-8'
page_text=response.text
#使用正则表达式 去获取动态加载过程中网页的地址
pattern='<div data-cid="(.*?)">.*?</div>'
lag_src_list=re.findall(pattern,page_text,re.S)
#地址加载
for i in lag_src_list:
    lag_address='https://movie.douban.com/j/review/'+i+'/full'
    print('动态加载地址',lag_address)
    #数据爬取
    lag_text=requests.get(url=lag_address,headers=headers).text
    lagPath=filepath+'/'+i+'.html'
    with open(lagPath,'w',encoding='utf-8') as fp:
        fp.write(lag_text)

动态加载地址: https://movie.douban.com/j/review/15181845/full
动态加载地址: https://movie.douban.com/j/review/15181838/full
动态加载地址: https://movie.douban.com/j/review/15183915/full
动态加载地址: https://movie.douban.com/j/review/15187137/full
动态加载地址: https://movie.douban.com/j/review/15185698/full
动态加载地址: https://movie.douban.com/j/review/15180267/full
动态加载地址: https://movie.douban.com/j/review/15186857/full
动态加载地址: https://movie.douban.com/j/review/15186999/full
动态加载地址: https://movie.douban.com/j/review/15184854/full


http://www.niftyadmin.cn/n/348162.html

相关文章

【线性代数笔记】线性代数知识点总结、概念之间关系总结

矩阵的秩 1. 基础 初等变换不改变矩阵的秩。 阶梯形矩阵非零行的个数即为该矩阵的秩。 r ( A ) r ( A T ) r ( A T A ) r ( A A T ) r(\boldsymbol{A})r(\boldsymbol{A}^{\mathrm{T}})r(\boldsymbol{A}^{\mathrm{T}}\boldsymbol{A})r(\boldsymbol{A}\boldsymbol{A}^{\mat…

一个神奇的小工具,让URL地址都变成了“ooooooooo“

转换的逻辑有点像短链平台一样&#xff0c;只不过这个是将你的URL地址变的很长长长长&#xff0c;但是看着都是 ooooooooo&#xff0c;很好奇是如何实现的&#xff0c;所以查阅了源码&#xff0c;本文解读其核心实现逻辑&#xff0c;很有趣且巧妙的实现了这个功能。 发现一个很…

离线部署环境白话文

离线安装docker 参考博文 &#xff1a; https://blog.csdn.net/chexlong/article/details/127932711 nexus安装 参考博文 &#xff1a;https://blog.csdn.net/csdnerM/article/details/127923675 nexus部署完之后web端页面访问不到。 1.首先检查配置文件中的端口设置。 2.ne…

3分钟理解chatgpt中的prompt

每个人都可以使用“ChatGPT”的超极力量&#xff0c;但只有掌握专业提示的人才能领先于其他人。 ChatGPT 就像一个神奇的魔法&#xff0c;但它不是单纯为了代替搜索获得结果的工具&#xff0c;而是回答问题和执行任务的伴侣。就像任何魔法一样&#xff0c;你必须知道如何正确说…

【有关长短链接映射问题】

工作中遇到的有关长链接生成的二维码过于密集&#xff0c;导致扫码识别效率低下的问题 解决思路&#xff1a;将长链接映射为短链接&#xff0c;使用短链接生成二维码&#xff0c;根据短链接查询长链接即可。 //长链接生成短链接方法&#xff1a; public String gererateShort…

Win10“我的电脑”图标不见了,恢复方法

Win10“我的电脑”图标不见了&#xff0c;恢复方法 当使用电脑时&#xff0c;若‘我的电脑’图标在桌面不显示&#xff0c;使得对电脑各个盘区文件的查找和打开带来不便&#xff0c;本文将以Win10为例子&#xff0c;介绍桌面图标不显示的处理恢复方法。 具体的恢复方法如下 1…

Unreal Niagara粒子入门1

记录下学习Niagara粒子的过程&#xff0c;这次调的是比较简单的一个效果&#xff1a; 使用了随粒子生命的缩放、打开速率解算、基本的发射器和Niagara容器。 1.创建Niagara Niagara中&#xff0c;发射器和NiagaraSystem文件是可以分开创建的&#xff1a; 通常直接点Niagara…

个人博客系统的测试报告

目录 1.项目背景2.项目功能3.测试计划3.1功能测试3.1.1 测试用例设计3.1.2 实际执行测试的部分操作步骤 3.2自动化测试3.2.1 脑图3.2.2 代码编写 1.项目背景 实现一个类似CSDN的个人博客系统 支持以下核心功能: 支持用户注册登录并设置个人信息如头像、昵称等等&#xff1b; 对…