Python爬取网页中图片,附上完整代码
概述
批量爬取数据,请遵循robots协议及相关网站协议及说明。
本代码仅供有需要爬取网页中图片的人参考,请不要从事违法行为。
本代码测试于:2021-01-04 14:04:14
说明:
- 本代码使用的python3.8
- 本代码只能爬取静态页面中的图片,即img标签是写到html静态页面里面的,而不是后期通过vue等js框架渲染的(判断是否满足条件:请右键查看代码源文件,看源码内是否存在所需要爬取的img标签src路径)。
- 本代码的正则表达式是依据特定的昵图网图片网页写的,爬取其他网页需自行修改
- 本代码用到两个外部库requests和os,一个内部库re
- 本代码在本人mac book上运行的,请自行改为自己的存储路径,window系统请自行查询路径注意事项
- 本代码是在昵图网查询的关键词“美女”,得出的结果
- 代码流程:获取页面内容 --> 从内容中用正则获取图片列表 --> 将每个元素作为图片保存到本地
完整代码
import requests
import re
import os
# 存储图片的路径
root = "/Users/ha/Downloads/nipic/"
# 昵图网图片的url
url = 'http://soso.nipic.com/'
# 参数
params = {"q": "美女"}
# 这里直接排除无用的图片,只保留我们需要的图片,这个正则是通过人工查看页面结构看到的
rule = re.compile(r'http://pic\S+?/pic/\d+?/\S+?.jpg')
# 获取页面内容
def getHTMLText(url, params):
headers = {
"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36"}
try:
r = requests.get(url, timeout=30, params=params, headers=headers)
r.raise_for_status()
# r.encoding = r.apparent_encoding 通过内容分析编码,比较慢,如果知道了encoding 直接写死就好了
r.encoding = 'UTF-8'
print(r.text)
return r.text
except:
return '获取页面失败'
# 从页面内容中解析需要的内容
def parsePage(html, rule):
try:
imgs = re.findall(rule, html)
return imgs
except:
return '解析图片失败'
# 批量获取图片
def getImgs(imgs):
for img in imgs:
getImg(img)
# 获取单张图片,并保存到指定路径
def getImg(img):
def getImg(img):
name = img.split('/')[-1]
file = root+name
print(file)
if not os.path.exists(file):
r = requests.get(img)
with open(file, 'wb') as f:
f.write(r.content)
f.close()
print(name + ' 保存成功')
else:
print('文件已存在')
try:
if not os.path.exists(root):
os.mkdir(root)
getImg(img)
except:
print('爬取失败')
def main():
html = getHTMLText(url, params)
imgs = parsePage(html, rule)
print(imgs)
print('共有 '+str(len(imgs))+' 张图片')
getImgs(imgs)
main()
如果觉得有用,请点赞收藏让更多人的同行少走弯路,祝所有同行朋友,程序没bug!