上一章讲了如何通过使用pyhthon的方法实现代理访问,这一章讲进行实战,比一个网站的图片自动化下载下来

目标网站:自己寻找任何一个图片网站,下面直讲解方法


1.分析网站元素,通过浏览器的审查元素查看

  1. 首先每张图片都有一个指向这组图的链接,要获取这个链接添加都一个列表里,然后在一个个遍历去下载对应链接里的图片,这里用get_page_num_1(url)来处理
  2. 进到每组图里,不会一页显示完所有的图片,此时用一个列表把这组图对应的所有链接存到一个列表里,用get_page_num_2(url)进行处理
  3. 如下图首页里有50页,使用detect_page_num(url)来查看有多少页,然后一页一页的遍历,在重复1.2步即可
  4. 未使用然和正则表达式,都是打开网页后用find方法寻找关键字
import urllib.request
import os
import random
ipList=['114.244.14.38:8060']
#,'27.208.94.59:8060','221.193.177.45:8060',def url_open(url):#proxy_support = urllib.request.ProxyHandler({'http':random.choice(ipList)})
#使用choice函数随机选择其中一个IP,这将会返回一个handler给proxy_support#opener = urllib.request.build_opener(proxy_support)
#创建 opener#opener.addheaders=[('User-Agent','Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36')]
#设置user-agent#urllib.request.install_opener(opener)
#因为使用了urlopen访问所以要安装该openerreq=urllib.request.Request(url)response=urllib.request.urlopen(req)html=response.read()return htmldef get_page_num_1(url): #找到http:xx'各个套图的链接,写在列表里html=url_open(url).decode('gbk')page_addrs=[]a=html.find('_blank')+14while a!=-1:b=html.find('.html',a,a+100)if b != -1:page_addrs.append(html[a+14:b])else:b=a+14a=html.find('_blank',b)print(page_addrs)return page_addrs
def get_page_num_2(url):  #找到各套路链接以后,翻页page_addrs_2=[]temp=[]temp=get_page_num_1(url)for each in temp:new_page='http:xx'+each+".html"print("当前下载网页为")print(new_page)html=url_open(new_page).decode("GBK")a=html.find("本组图片")+13b=html.find("</strong>",a)num=int(html[a:b])for each1 in range(1,num+1):if each1==1:page_addrs_2.append('http:xx'+each+'.html')print('列表内容')print(page_addrs_2)else:page_addrs_2.append('http:xx'+each+'_'+str(each1)+'.html')print('列表内容')print(page_addrs_2)return page_addrs_2def find_img(url_page,count):#在网页中下载图片html=url_open(url_page).decode('GBK')print(url_page)img_addrs=[]a=html.find("img src=")C=html.find("class=\"left\">")+13D=html.find("</span>",C)count=html[C:D]print(count)while a != -1:b=html.find(".jpg",a,a+255)if b != -1:if html[a+9:b+4]=='../../Image2/logo.jpg':print("不下载图标")else:img_addrs.append(html[a+9:b+4])print(html[a+9:b+4])save_img('ooxx',html[a+9:b+4],count)else:b=a+9a=html.find('img src=',b)return img_addrsdef download(folder='ooxx'):     #通过列表里的链接一个个去下载图片if  os.path.exists('C:\\Users\\威\\Desktop\\ooxx')==True:os.chdir(folder)else:os.mkdir(folder)os.chdir(folder)page_addrs={}count=0url='http:XXXXpage_num=detect_page_num(url)#侦查有多少页for count in range(1,page_num+1):print("正在下载第一页")if count==1:page_addrs=get_page_num_2(url)else:url=url+str(count)+'.html'page_addrs=get_page_num_2(url)for each in page_addrs:count+=1img_addrs=find_img(each,count)#save_img(folder,img_addrs)def save_img(folder,img_addrs,count):#for each in img_addrs:filename=img_addrs.split('/')[-1]print(count+filename)with open(count+filename,'wb')  as f: #先创建名字,在用urlopen打开图片#有with会自动调用closeimg=url_open(img_addrs)f.write(img)
def detect_page_num(url):#侦查当前网页有多少页html=url_open(url).decode('GBK')a=html.find('当前')+7b=html.find('页',a)+1print('当前分类共有%s页'%html[a:b-2])return int(html[a:b-2])if __name__=='__main__':download()

有不明白的地方,或者想交流的朋友,欢迎添加QQ:498721954


【2】基于python的网路爬虫笔记(实战)相关推荐

  1. 《FlaskWeb开发:基于Python的Web应用开发实战》笔记

    开源库的cdn加速 可以在这里直接搜索复制script链接 https://www.bootcdn.cn/ requirements.txt文件的生成与使用 生成requirements文件:$ pi ...

  2. 《Flask Web开发:基于Python的Web应用开发实战》笔记(原创)

    内容提要 在学习"狗书"<Flask Web开发:基于Python的Web应用开发实战>的过程中,一直遇到各种各样的坑.该书的第一部分是"Flask简介&qu ...

  3. python网络爬虫_python小知识,基于Python 的网络爬虫技术分析

    在现阶段大数据的时代中,想要实现对数据的获取和分析,要先具备足够的数据源,网络爬虫技术就为其数据获取提供了良好的条件,且还能够实现对数据源的目的性采集. 在网络爬虫技术应用中,Python 脚本语言的 ...

  4. 【OpenCV图像处理入门学习教程六】基于Python的网络爬虫与OpenCV扩展库中的人脸识别算法比较

    OpenCV图像处理入门学习教程系列,上一篇第五篇:基于背景差分法的视频目标运动侦测 一.网络爬虫简介(Python3) 网络爬虫,大家应该不陌生了.接下来援引一些Jack-Cui在专栏<Pyt ...

  5. 学习《Flask Web开发:基于Python的Web应用开发实战》分享

    学习<Flask Web开发:基于Python的Web应用开发实战>分享一直在说学习Python,对同事,对朋友,都说我正在学习Python,这无形给自己一定的压力,促使自己要去学习,进步 ...

  6. Dataset之MNIST:MNIST(手写数字图片识别+ubyte.gz文件)数据集的下载(基于python语言根据爬虫技术自动下载MNIST数据集)

    Dataset之MNIST:MNIST(手写数字图片识别+ubyte.gz文件)数据集的下载(基于python语言根据爬虫技术自动下载MNIST数据集) 目录 数据集下载的所有代码 1.主文件 mni ...

  7. 基于python的网站_基于Python的网站爬虫应用研究

    基于 Python 的网站爬虫应用研究 陈清 [期刊名称] <通讯世界> [年 ( 卷 ), 期] 2020(027)001 [摘要] 如何于海量的互联网网站中获取有用资源信息 , 对网站 ...

  8. Python之父推荐!《Python 3网络爬虫开发实战》第二版!文末送签名版!

    很多读者会让我写爬虫方面的书籍,我也一直没写,没写的原因主要有两个,第一个就是在爬虫方面我其实不是很擅长,第二个原因就是因为在爬虫领域庆才已经做的足够好了,我写不一定能写出庆才这水平的,所以也就一直没 ...

  9. python selenium爬虫_详解基于python +Selenium的爬虫

    详解基于python +Selenium的爬虫 一.背景 1. Selenium Selenium 是一个用于web应用程序自动化测试的工具,直接运行在浏览器当中,支持chrome.firefox等主 ...

最新文章

  1. 第十六智能车竞赛总决赛获奖证书寄送
  2. 一道面试题:用多种方法实现两个数的交换
  3. Processing--鼠标响应(1)
  4. mysql导入本地sql脚本的两种方式
  5. Core IO学习心得
  6. OsharpNS轻量级.net core快速开发框架简明入门教程-基于Osharp实现自己的业务功能...
  7. Learn OpenGL(四)——片段着色器(Fragment Shader)
  8. 3Dmax和SketchUp有什么区别
  9. Axure最新激活码
  10. java dht 爬虫_python开发的 dht网络爬虫
  11. 虚拟机安装和激活ros5.25软路由
  12. 手机安装W ndows7镜像,Windows7专业版
  13. ppi 各代iphone_各代iPhone逻辑分辨率与物理分辨率
  14. 从江户川乱步到东野圭吾-日本推理小说的发展 (1)
  15. 一英寸芯片大小_英寸,究竟是多大?
  16. web前端学习(一):国内最常用,又优秀的web框架,Vue渐近式框架
  17. 蚂蚁的愤怒之源(微风拂面)-中篇
  18. 怎么看台式计算机的屏幕大小,如何在计算机上查看显示器尺寸win10
  19. RuntimeError: non-empty 3D or 4D input tensor expected but got ndim: 4
  20. 最近远景论坛打不开修改hosts_s芃成_新浪博客

热门文章

  1. dicom通讯的工作方式及dicom标准简介
  2. Unity2D游戏使游戏角色移动的脚本
  3. 基于JAVA+SpringBoot+VUE的心理健康测试系统的设计与实现
  4. 初级入门华为交换机学习
  5. 编玩边学——高新科技启蒙教育,让程序编写铸就高新科技能手
  6. 结构体的大小如何计算
  7. Python开发者的画笔-turtle
  8. LOG,Harris,SUSAN角点及边缘检测原理和代码实现
  9. Yolov1-pytorch版 论文、原理及代码实现
  10. 如何用代码实现图片,音频视频的复制粘贴