妹子图网站爬虫实现
具体流程
①确定所要爬取的网站的url:http://www.mzitu.com/all/。爬取妹子图网站的方便之处在于它在每日更新页面里包含了所有年份月份的链接。所以我们下一步我们只需要获取所有的链接即可。
②获取第一步中确定的url中的页面源码。从源码可以找到所有”妹子“的图片详情页的链接。
③获取所有”妹子“的图片详情页链接。
④迭代获取所有的图片详情页链接的源码。在详情页中我们可以找到所有与当前妹子相关的所有图片。细心的话我们可以发现,每张图片的页面url就差一个数字,该数字就是第几张图片。所以下一步我们需要在详情页源码中获取图片总数以及当前页面的图片的url即可。
⑤获取所有详情页源码中的图片总数,根据图片总数获取所有图片url。
⑥剩下的就是下载所有图片。
爬取流程图
注意事项
①使用图片url爬取图片时站主使用了防盗链,所以请求url时必须设置headers,headers要设置User-Agent和Referer,Referer可以设置是主页面。
②保存图片时,图片文件的访问模式是”wb“。
③在为每个妹子创建文件夹来保存她们自己的图片时,如果用中文作为文件夹的名字的话,必须给名字做编码转换,先解码,再编码成gbk格式,这样的话文件夹名字才不会乱码。
代码
# _*_ coding: utf-8 _*_
import os, sys
import urllib2, urllib
import re
import requests
class MZTU:
'妹子图图片爬虫'
def __init__(self):
self.first_url = 'http://www.mzitu.com/all/'
self.root = os.getcwd()
self.base_path = self.root+'\\'+'meizipics'
self.user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36'
self.referer = 'http://www.mzitu.com/all/'
self.headers = {
'User-Agent': self.user_agent, 'Referer': self.referer}
isExist = os.path.exists(self.base_path)
if not isExist:
os.makedirs(self.base_path)
print '根目录创建成功!'.decode('utf-8').encode('gbk')
else:
print '根目录已经存在!'.decode('utf-8').encode('gbk')
def getPage(self, url):