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 + iimg_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() 把字符串中所有匹配正则表达式的地方换成新的字符串