一.规律性:
1.每一张图片除了页码数,其他的不会变化
2.最新页面的地址是保存在:审查元素->body->body->content->comments->cp-pagenavi->class
3.图片的地址都是来自新浪的服务器:
二.爬虫程序:
访问网页的头文件:
import urllib.request
创建文件夹的头文件:
import os
#打开网页链接
def url_open(url):
req = urllib.request.Request(url) #生成一个Request对象,添加文件头,看起来像个浏览器在访问
#检查User-Agent,随便在Header中cp一个
req.add_header('User-Agent','Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36')
response = urllib.request.urlopen(url)
html = response.read()
return html
#找到当前页面对应的数字
def get_page(url):
html = url_open(url).decode('utf-8')
a = html.find('current-comment-page') + 23 # 查找字符串 23是偏移到2439的位置
b = html.find(']',a)#从a开始
return html[a:b]
#找到当前页面所有的图像的地址
def find_imgs(url):
html = url_open(url).decode('utf-8') #解码,得到字符串类型的网页文档
img_addrs = [] #图片地址存放在列表中
a = html.find('img src=')
while a != -1:
b = html.find('.jpg',a,a+255) #从a开始,网页地址最大255,结束
if(b != -1):
img_addrs.append('http:' + html[a + 9:b + 4]) #如果没有协议必须加上http:
else:
b = a + 9 #不要循环在同一个位置
a = html.find('img src=',b) #下一次的起始位置就上上一次的结束位置
for each in img_addrs:
print(each)
return img_addrs #返回包含图片地址的列表
#保存图像
def save_imgs(folder,img_addrs):
for each in img_addrs:
filename = each.split('/')[-1] #分割后取最后一个名字就是filename
with open(filename,'wb') as f: #'wb'形式写入
img = url_open(each)
f.write(img)
#下载妹子图
def download_mm(folder = 'OOXX',pages = 10):
os.mkdir(folder) #创建
os.chdir(folder) #切换进去
url = 'http://jandan.net/ooxx/'
page_num = int (get_page(url)) #得到当前页面的地址 1293
for i in range(pages):
page_num -= i
page_url = url + 'page-' + str(page_num) + '#comments'
img_addrs = find_imgs(page_url) #当前页面所有图片的地址,保存到一个列表
save_imgs(folder,img_addrs) #将图片保存到指定的文件夹
if __name__ == '__main__':
download_mm()
运行效果:
错误类型:HTTP Error 404: Not Found ;意思是打开网页时出错了