Python3爬虫学习笔记2.2——爬图片-妹子图


正是有失远迎,今天尝试爬取妹子图妹子图
我们首先确认一下自己要爬取网页图片的规律。打开首页会发现每页都有10个写真集。url为 www.meizitu.com
这里写图片描述
现在我们打开第二页看下
第二页
这里就发现了一个问题,打开第二页后 ,下面的页面显示仍然为第1页;这个时候的页面中有30个写真集,页面的url为www.meizitu.com/a/list_1_1.html。
我们在该页面中任意点开一个写真集,每个写真集里边会有数张图片,这些图片证实我们想要了。
这是我们观察一下该页面的url,为:www.meizitu.com/a/5418.html。
可以选择直接访问图片页面的url来爬取,但是我们不确定页面的数字是否连续。所以我们选择先打开写真集列表页面,在打开写真集的页面的方式来访问,并保存我们想要的图片。

def getUrl(self,target_url,start_page,page_num):
all_urls=[]
for i in range(start_page,page_num+1):
new_urls=re.sub('/list_1_\d','/list_1_%d'%i,target_url,re.S)
all_urls.append(new_urls)
return all_urls

用该代码可以得到所有待爬取写真集列表的url。然后再每个写真集的列表页面中,得到每个写真集的url。即

def getLink(self,page_link):
page_html=requests.get(page_link,timeout=0.5)
all_pic_link=re.findall('<a target=\'_blank\' href="(.*?)">',page_html.text,re.S)
return all_pic_link

在该页面可以得到所有的图片,然后将其保存即可,整理代码如下。ps:改代码有点小问题,就是在最后几页的爬取过程中,图片的正则表达式不匹配,那几页的页面源码和最近页面的不一样。改一下正则表达式就可以了。

import re
import requests

class spider():
def getUrl(self,target_url,start_page,page_num):
all_urls=[]
for i in range(start_page,page_num+1):
new_urls=re.sub('/list_1_\d','/list_1_%d'%i,target_url,re.S)
all_urls.append(new_urls)
return all_urls

def getLink(self,page_link):
page_html=requests.get(page_link,timeout=0.5)
all_pic_link=re.findall('<a target=\'_blank\' href="(.*?)">',page_html.text,re.S)
return all_pic_link

def getPic(self,page_url):
pic_html=requests.get(page_url,timeout=0.5)
all_pic_src=re.findall('<img alt=.*?src="(.*?)" /><br />',pic_html.text,re.S)
return all_pic_src

#需要提前新建文件夹
def saveFile(self,pic_src,num):
pic=requests.get(pic_src,timeout=0.5)
f=open('pic\\'+str(num)+'.jpg','wb')
f.write(pic.content)
f.close



if __name__=='__main__':
meizituSpider=spider()
i=1
url='http://www.meizitu.com/a/list_1_1.html'
all_link=meizituSpider.getUrl(url,7,89)
for link in all_link:
print('准备爬取:'+link)
all_pic_list=meizituSpider.getLink(link)
for pic_url in all_pic_list:
print(pic_url)
all_pic=meizituSpider.getPic(pic_url)
for pic_src in all_pic:
#print(pic_src)
try:
meizituSpider.saveFile(pic_src,i)
print(i)
i+=1
except:
pass

下面是爬取到的图片。
妹子图
老司机尽情飙车吧。

智能推荐

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
© 2014-2019 ITdaan.com 粤ICP备14056181号  

赞助商广告