一、实现访问网页
首先第一步是要实现python对网页的访问,直接上代码
代码如下:
import urllib.request
page=urllib.request.urlopen('http://tieba.baidu.com/p/1753935195')#打开网页
htmlcode=page.read()#读取网页代码
print(htmlcode)#在命令窗口输出代码
f=open('pagecode.txt','w')
f.write(str(htmlcode))
f.close()
结果如下:同时目录下出现了pagecode.txt文件
现在对其封装如下:
import urllib.request
def gethtmlcode(url):
page=urllib.request.urlopen(url)#打开网页
hcode=page.read()#读取网页代码
return str(hcode)
htmlcode=gethtmlcode('http://tieba.baidu.com/p/1753935195')
print(htmlcode)#在命令窗口输出代码
f=open('pagecode1.txt','w')
f.write(htmlcode)
f.close()
如此就将目标网页代码成功获取了
二、提取目标:图片
首先,我可以预料到,你跟本不会有心情看乱七八糟的网页代码。
由此需要一个正则表达式如:reg = r’src="(.+?.jpg)"’
匹配以src="开头然后接多个字符以.jpg"结尾的字符串
其目的是从获得的网页代码中寻找满足上述正则表达式的字符串
接着 用python中的re库中的 re.findall(str) 来返回一个满足匹配的字符串组成的列表
reg = r'src="(http.+?\.jpg)" '#正则表达式
reg_img = re.compile(reg)
imglist = reg_img.findall(get_html('http://tieba.baidu.com/p/1753935195'))#进行匹配
上述源码将满足条件的字符串赋给了imglist
接着用代码urllib.request.urlretrieve(imglist,'文件路径‘)
这里需要注意的是文件路径中的文件夹路径必须是已有的,否则会返回
FileNotFoundError: [Errno 2] No such file or directory:
所以在进行目录创建前可以先建一个目录创建函数,其完整源码如下:
import urllib.request
import re
import os
def gethtmlcode(url):
page=urllib.request.urlopen(url)#打开网页
hcode=page.read()#读取网页代码
return str(hcode)
def makefiledir(filedir):
isexists=os.path.exists(filedir)#判断该目录是否存在
if not isexists:
os.makedirs(filedir)#创建目录
return True
else:
print("该目录已存在,请另建!")
return False
def getimg(url):
reg = r'src="(http.+?\.jpg)"'#正则表达式
reg_img = re.compile(reg)
imglist=reg_img.findall(url)
x=0
filedir='E:/project design/python_project/webpac/bug/imag/'
makefiledir(filedir)
for img in imglist:
a=img.rfind("<")
b=len(img)
if a>=0:#过滤不正确的字符串
img=str(img)
present=img[a:]
print(a,b)
print(img)
else:
x += 1
urllib.request.urlretrieve(img, filedir+'G%s.jpg' % x)#批量操作
htmlcode=gethtmlcode('https://tieba.baidu.com/p/1753935195?red_tag=1220612178')
getimg(htmlcode)
其运行结果如下:
错误1:AttributeError: module ‘urllib’ has no attribute ‘urlopen’
源码:
import urllib
page=urllib.urlopen('http://tieba.baidu.com/p/1753935195')#打开网页
htmlcode=page.read()#读取网页代码
print(htmlcode)#在命令窗口输出代码
分析: Python3.X中应该用urllib.request