网页内容抓取工具(使用python程序实现简单的网页图片抓取:获取网页源码 )

优采云 发布时间: 2021-11-15 12:14

  网页内容抓取工具(使用python程序实现简单的网页图片抓取:获取网页源码

)

  使用python程序实现简单的网页图片抓取

  最终目标:使用python中的urllib、gevent、re模块,完成从网页源码到抓取整个网页图片的功能。

  第一步:获取网页源码

  1、使用谷歌浏览器打开需要抓取的网页,在空白处右击查看网页源码

  2、CTRL+a 全选 CTRL+c 复制整个网页源码

  3、新建一个文件(img.html)保存网页源码

  第 2 步:使用正则表达式处理网页源代码

  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

  第 3 步:访问链接并下载图片

  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__ == &#39;__main__&#39;:

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__ == &#39;__main__&#39;:

main()

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线