python多页tif图片 python爬取多张图片
转载
逻辑
导入re
、os
和requests
模块,用于正则表达式匹配、文件操作和发送HTTP请求。
定义了getHtmlContent(url)
函数,通过发送GET请求获取指定URL的网页HTML内容,并返回响应的HTML内容。
定义了getJPG(html)
函数,使用正则表达式从HTML内容中解析出所有jpg图片的URL,并返回一个URL列表。
定义了batchDownloadJPGs(imgUrls, root='./newPhoto/')
函数,用于批量下载图片。遍历图片URL列表,下载图片并保存到指定目录下。
定义了download(url)
函数,调用getHtmlContent()
函数获取网页HTML内容,然后调用getJPG()
函数解析出所有jpg图片的URL列表,最后调用batchDownloadJPGs()
函数进行批量下载图片。
定义了main()
函数,设置要下载的网页URL为百度贴吧某个帖子的URL,并调用download()
函数进行下载。
使用if __name__ == '__main__':
条件语句判断当前脚本是否被直接执行,如果是,则调用main()
函数执行程序。
代码
import re # 导入re模块,用于正则表达式匹配
import os # 导入os模块,用于文件操作
import requests # 导入requests库,用于发送HTTP请求
# 根据URL获取网页HTML内容
def getHtmlContent(url):
headers = { # 设置请求头信息,模拟浏览器访问,防止图片下载为0
'Cookie': '...',
'User-Agent': '...'
}
page = requests.get(url, headers=headers) # 发起GET请求并获取响应
return page.text # 返回响应的HTML内容
# 从html中解析出所有的jpg图片的url
def getJPG(html):
jpgReg = re.compile(r'<img.+?src="(.+?\.jpg)" width') # 使用正则表达式匹配jpg图片的url
jpgs = re.findall(jpgReg, html) # 解析出JPG的url列表
print('获取图片链接数为: ', len(jpgs))
return jpgs
# 批量下载图片,默认保存到指定目录下
def batchDownloadJPGs(imgUrls, root='./newPhoto/'):
# 如果文件夹不存在,自动创建
if not os.path.exists(root):
os.mkdir(root)
count = 1 # 用于给图片计数
for url in imgUrls:
path = root + str(count) + '.' + url.split('.')[-1] # 取文件后缀名并且拼接
with open(path, 'wb') as file:
response = requests.get(url) # 发起GET请求下载图片
file.write(response.content) # 将请求返回的二进制内容写入文件
print(f'正在下载保存第{count}张图片')
count += 1
def download(url):
html = getHtmlContent(url) # 获取网页HTML内容
jpgs = getJPG(html) # 解析出所有jpg图片的url列表
batchDownloadJPGs(jpgs) # 批量下载图片
def main(): #定义主函数,设置要下载的网页URL,并调用下载函数。
url = 'https://tieba.baidu.com/p/2256306796?pn=2'
download(url)
if __name__ == '__main__': #判断当前脚本是否被直接执行。
main()
上述代码涉及以下几个知识点
正则表达式匹配:使用re
模块中的re.compile()
和re.findall()
函数,通过正则表达式匹配HTML内容中的jpg图片URL。re.compile()
用于编译正则表达式,re.findall()
用于在字符串中查找所有匹配的子串并返回列表。
文件操作:使用os
模块中的os.mkdir()
函数创建目录,用于保存下载的图片。os.mkdir()
用于创建指定名称的目录。
发送HTTP请求:使用requests
库发送GET请求,获取网页的HTML内容和图片的二进制数据。通过requests.get()
方法发送GET请求,并携带请求头信息进行模拟浏览器访问。
批量下载图片:通过循环遍历图片URL列表,使用requests.get()
方法发送GET请求下载图片的二进制数据,并将数据写入文件。其中使用with open()
语句打开文件,以二进制写入模式写入文件。
本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。