爬取图库(一)
1. 选取网站,构造思路:
*a*.选取网址url:http://desk.zol.com.cn/dongman/haizeiwang/
![在这里插入图片描述](https://img-blog.csdnimg.cn/2019030312214851.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxMzQwMTcw,size_16,color_FFFFFF,t_70)
*b*.分析布局,外循环获取每块图片合集的外连接。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190303122201977.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxMzQwMTcw,size_16,color_FFFFFF,t_70)
*c*.内循环获取每张图片src,接着urlretrieve下载图片。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190303122218826.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxMzQwMTcw,size_16,color_FFFFFF,t_70)
2.上代码:
from bs4 import BeautifulSoup as bs#引入BeautifulSoup
from urllib import request#引入request
from urllib.request import urlretrieve#引入解压图片urlretrieve
f=open('G:\爬虫训练\图片\.jpg','wb')#输出流,wb只写
url='http://desk.zol.com.cn/dongman/haizeiwang/'
response=request.urlopen(url)#建立连接
first_html_data=response.read()#读取网页
soup=bs(first_html_data,'html.parser')#转码,html.parser不引入可能导致程序不成功,它的功能是获取全部HTML防止简略。
soup_text=soup.find('ul',class_='pic-list2 clearfix')#寻找相应标签位置
i=0#i做记下图片标签作用
for pra in soup_text.children:#.children是个列表形式
if(pra.name=='li'):#寻找标签'li'
URL='http://desk.zol.com.cn'+pra.a.get('href')#发现标签缺少部分信息
second_response=request.urlopen(URL)#建立次页面链接
second_html_data=second_response.read()#读取
second_soup=bs(second_html_data,'html.parser')#转码
second_soup_text=second_soup.find('ul',id='showImg')#开始找图
for pra2 in second_soup_text.children:#图的链接在ul.children列表里的a.img中
if(pra2 !='\n'):#防止HTML空行报错
if(pra2.a.img.get('src')!=None):#发现链接不止在src中,还有在srcs中
img_url=(pra2.a.img.get('src'))#获取src
else:
img_url=(pra2.a.img.get('srcs'))#获取srcs
urlretrieve(img_url, 'G:\爬虫训练\图片\%04d.jpg'%i)#图片链接下载
i=i+1#叠加
print("正在下载第%04d张图片"%i)#格式化代替图片名输出
3. 结果分析及进步方向:
a.结果如下
b.进步方向:图片获取的是小图,而且数量不多只有180余张。卡在了html.parser很久,毕竟小白不是懂太多,希望以后越来越熟练吧! 以后还可以稍微调用函数减少代码数量。