目的:用urllib2,爬一堆风景图片
重点代码
<code>
response = urllib2.urlopen(url).read()
soup = BeautifulSoup(
response, # html字符串
'html.parser', # html解析器
from_encoding='utf-8' # 字符编码
)
</code>
其中,urlopen就顾名思义了,可以简单理解为打开一个url,然后获得该URL相对应的东西在python里的对象,然后通过read之后,就得到了页面的所有构成元素了
先看下urlopen返回的是什么
<code>
if name=='main':
s = urllib2.urlopen('http://www.baidu.com/')
print(s.read(100))
</code>
read可以传参数,在这里是读取100个字符,结果如下:
然后上面重点代码里的soup是一个BeautifulSoup对象,是一个第三方的用于html页面内容解析的库,当创建了一个BeautifulSoup对象之后,就可以用这个对象对html的内容进行解析,比如:
<code>
attr = {
'class':'pic',
}
nodes = soup.find_all('a',attr)
</code>find_all()函数是查找所有符合参数条件的元素,上面的代码就是查找所有类名为pic的a元素,除了find_all之外,还有一个find元素,是查找符合条件的第一个元素,知道这两个函数之后,已经可以爬东西了。
<code>
import urllib2
from bs4 import BeautifulSoup
def spider_image(url,pre_filename):
response = urllib2.urlopen(url).read()
soup = BeautifulSoup(
response, # html字符串
'html.parser', # html解析器
from_encoding='utf-8' # 字符编码
)
attr = {
'class':'pic',
}
nodes = soup.find_all('a',attr)
url_list = set()
for node in nodes:
try:
url_list.add(node['href'])
except:
pass
for url in url_list:
img_html = urllib2.urlopen(url).read()
soup = BeautifulSoup(
img_html, # html字符串
'html.parser', # html解析器
from_encoding='utf-8' # 字符编码
)
img_url = soup.find('img',id="imgView")
img_name = img_url['alt']
try:
img = urllib2.urlopen(img_url['src']).read()
print(u'正在下载图片:'+img_name)
fout = open(pre_filename+img_name+'.jpg','wb')
fout.write(img)
fout.close()
except Exception as e:
print(e)
pass
def mkdir(path):
# 引入模块
import os
# 去除首位空格
path=path.strip()
# 去除尾部 \ 符号
path=path.rstrip("\")
# 判断路径是否存在
# 存在 True
# 不存在 False
isExists=os.path.exists(path)
# 判断结果
if not isExists:
# 如果不存在则创建目录
print path+' 创建成功'
# 创建目录操作函数
os.makedirs(path)
return True
else:
# 如果目录存在则不创建,并提示目录已存在
print path+' 目录已存在'
return False
if name=='main':
url_list = [
'http://www.tooopen.com/img/90_894.aspx'
]
i = 1
for url in url_list:
print(u'现在开始下载第'+str(i)+u'个网站的图片')
# 定义要创建的目录
mkpath='F:\spider'+str(i)
# 调用函数
mkdir(mkpath)
spider_image(url,'F://spider//spider_image'+str(i)+'//')
i = i + 1
</code>
爬图片的话,其实就是读取到图片之后,转成二进制数据之后,写入文件就行了,然后运行就可以了,然后就看到一堆图片在目录里