小编,近期学习了一些python的凤毛菱角,就开始迫不及待的试试水,写了一个爬取百度贴吧单页图片的程序。以下是战果。特发帖记录一下。(小编用的python3.6版本)
效果:
自动爬取并下载图片到本地:
代码:
其实很简单,我们直接看下整体的代码:
解析:
第一行的utf-8是为了支持中文。
这里我们导入了两个库,分别是 urllib.request 和 re。request是用来进行 url 网络请求的,而 re 是一个正则表达式匹配的库。这里我们要先对网站进行模拟请求,然后找到网站中的图片进行下载。
第一个方法:getHtml。
用来抓取网页源代码。想查看源代码的同学可以在末尾加入“print(html)”即可。也可以打开网页右键—>图片->审查元素即可查看到网页源码。
方法二:getImg
在这个方法中,我们设置了一个正则表达式,用来在网页源代码中找到图片的资源路径,这个正则表达式要根据不同的网站去具体设置,比如我爬取的这个网站,图片对应的源代码是这样的: reg = r’src=”(http.*?.jpg)”‘,获取到网页图片的链接。之后要做的就是下载了。
方法三:DL
最后一步就是下载图片,这里我们用 for 循环,将图片资源路径中的每个图片,使用 request 库的 urlretrieve 函数来下载图片,这个函数其实可以接受很多参数,这里我们设置了要下载的图片资源路径和要命名的名字(我们使用一个变量num来对每个图片依次命名为1,2…),还可以设置下载路径、用来显示下载进度的回调函数等等。如果不设置下载路径默认会下载到代码文件当前所在的文件夹。
源代码:
# -*- coding: utf-8 -*-
“””
Created on Tue Sep 26 21:47:02 2017
@author: leiji
“””
import re
import urllib.request
def getHtml(url):
page = urllib.request.urlopen(url)
html = page.read()
return html
def getImg(html):
reg = r’src=”(http.*?.jpg)”‘
imgre = re.compile(reg)
html=html.decode(‘utf-8’)#python3
imglist = re.findall(imgre,html)
return imglist
num = 1
def Dl(title):
for num in range(1,len(title)):
urllib.request.urlretrieve(title[num],’%s.jpg’ % num)
num += 1
html = getHtml(“***/p/2957576690?fr=good”)
title = getImg(html)
Dl(title)
本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:dandanxi6@qq.com