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