python脚本-网页爬虫获取网页图片
代码
import requests
import re
import time
url="http://10.9.47.154/python-spider/"
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"
}
def gethtml(url):
res=requests.get(url=url,headers=headers)
return res.content
def getimgpath(html):
imgpath=re.findall(r"style/\w*\.jpg",html)
return imgpath
def download(img_save_path,img_url):
with open(img_save_path,"wb") as f:
f.write(gethtml(url=img_url))
html=gethtml(url).decode()
path1=getimgpath(html=html)
for i in path1:
img_url=url + i
img_save_path=f"./img/{time.time()}.jpg"
download(img_save_path=img_save_path,img_url=img_url)
效果


相关模块参数
模块中的请求方法
| 请求方法 | 说明 |
|---|
| 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.cookies | cookie 相关信息 |
re 模块
从网页内容中提取图片地址。
正则表达式(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() | 把字符串中所有匹配正则表达式的地方换成新的字符串 |
| |
| re.split() | 根据正则表达式中的分隔符把字符分割为一个列表,并返回成功匹配的列表字符串也有类似的方法,但是正则表达式更加灵活 |
| re.sub() | 把字符串中所有匹配正则表达式的地方换成新的字符串 |