终极目标:使用python中的urllib、gevent、re模块完成从一个网页源码到抓取整个网页图片的功能。
第一步:获取网页源码
1、使用Google浏览器打开需要抓取图片的网页,在空白处点击右键查看网页源代码
2、CTRL+a 全选 CTRL+c复制整个网页源码
3、新建文件(img.html) 保存网页源码
import re
def get_img_link():
"""使用正则表达式处理网页源码"""
# 打开保存网页源码的文件
f = open("img.html", "rb")
# 读取文件里的内容
file_content = f.read()
# 关闭文件
f.close()
# 使用正则表达式筛选链接
img_link_list = re.findall(r"https://.*?.jpg", file_content.decode("utf-8"))
return img_link_list
import urllib.request
import os
def download_img(img_link):
# 访问链接
link_file = urrlib.request.urlopen(img_link)
# 读取链接图片信息
link_img_content = link_file.read()
# 创建文件夹保存download文件
download_folder = os.mkdir("download")
# 以读的方式打开一个文件
with open(download + "/" + "[复制]图片.jpg", "wb")
f.write(link_img_content)
import gevent
from gevent import monkey
gevent.monkey.patch_all() # gevent 补丁包
def main():
link_lists = get_link()
# 多任务download
i = 0
link_lists_length = len(link_lists)
while i < link_lists_length:
j = i + 1
k = i + 2
gevent.joinall([gevent.spawn(download, link_lists[i], i + 1, link_lists_length),
gevent.spawn(download, link_lists[j], j + 1, link_lists_length),
gevent.spawn(download, link_lists[k], k + 1, link_lists_length)])
i += 3
print("下载已完成!")
if __name__ == '__main__':
main()
import re
import urllib.request
import gevent
from gevent import monkey
import os
num = 0
def get_link():
# 打开保存从网上得到的网页源码
f = open("link_resource.txt", "rb")
# 读取里面的内容
file_content = f.read()
# 关闭文件
f.close()
# 使用正则表达式筛选正确的链接
link_lists = re.findall(r"https://.*?.jpg", file_content.decode("utf-8"))
return link_lists
def download(link_list, i, link_list_length):
global num
# 访问链接
link_file = urllib.request.urlopen(link_list)
# 读取内容
file_content = link_file.read()
try:
# 建文件夹 文件保存内容
os.mkdir("download")
except:
pass
folder = "download"
with open(folder + "/" "图片%d.jpg" % i, "wb") as f:
f.write(file_content)
num += 1
# print("\r总共:%d已经下载:%d张照片,下载进度%.2f%%,%.2f%%" % (link_list_length, i, i / link_list_length * 100, num / link_list_length * 100), end="")
print("\r总共:%d已经下载:%d张照片,下载进度%.2f%%" % (link_list_length, num, num / link_list_length * 100), end="")
def main():
gevent.monkey.patch_all()
# 过去网上链接资源 get_link
link_lists = get_link()
# 多任务download
i = 0
link_lists_length = len(link_lists)
while i < link_lists_length:
j = i + 1
k = i + 2
gevent.joinall([gevent.spawn(download, link_lists[i], i + 1, link_lists_length),
gevent.spawn(download, link_lists[j], j + 1, link_lists_length),
gevent.spawn(download, link_lists[k], k + 1, link_lists_length)])
i += 3
print("下载已完成!")
if __name__ == '__main__':
main()