这两年python特别火,火到博客园现在也是隔三差五的出现一些python的文章。各种开源软件、各种爬虫算法纷纷开路,作为互联网行业的IT狗自然看的我也是心痒痒,于是趁着这个雾霾横行的周末瞅了两眼,作为一名老司机觉得还是应该以练带学,1024在程序员界这么流行的网站,当然拿来先练一练。

python自称是以自然语言的视角来编程,特点是开发快,语言简洁,没那么多技巧,大名鼎鼎的豆瓣、youtube都是使用python开发的网站,看来python在大规模使用这个方面来讲应该没有啥子问题;python也不是没有缺点在性能方面就Java、C++等老前辈还是没得比的,另外python和nodejs一样只能使用CPU单核,也是性能方面影响是因素之一。但python在特定领域表现突出,特别是脚本、爬虫、科学算法等。

好了,还是说正事如何爬取1024网站的图片

分析

列表页面

首先进入1024的导航网站,随便点击一个地址进入选择图片区或者在网站地址后面添加thread0806.php?fid=16&search=&page=,这就是1024网站的图片区,这个爬虫就是主要抓取这个区域的所有图片,使用浏览器debug分析一下这个页面发现基本都是列表页,格式如下:

在地址栏http://xxxxxx.biz/thread0806.php?fid=16&search=&page=后面拼1、2、3等于就是访问图片区第一页、第二页、第三页的列表页。根据这些列表页就可以爬出具体的每一个图片页的地址,类似上图的地址:htm_data/16/1611/2114702.html 在地址的前面拼接上主站地址就是具体的图片页了。所以根据以上的分析:通过循环地址栏找到不同的列表页在根据列表页找到具体的图片页

地址栏->图片列表->图片页地址

获取列表页图片地址代码如下:

import urllib.request,socket,re,sys,osbaseUrl='http://xxxx.biz/'def getContant(Weburl):Webheader= {'Upgrade-Insecure-Requests':'1','User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.103 Safari/537.36',}req = urllib.request.Request(url = Weburl,headers=Webheader)respose = urllib.request.urlopen(req)_contant = respose.read()respose.close()return str(_contant)def getUrl(URL):pageIndex = 1for i in range(1,int(pageIndex)+1):Weburl = URL + str(i)contant = getContant(Weburl)comp = re.compile(r'<a href="htm_data.{0,30}html" target="_blank" id=""><font color=g')urlList1 = comp.findall(contant)comp = re.compile(r'a href="(.*?)"')urlList2 = comp.findall(str(urlList1))urlList = []for url1 in urlList2:url2 = baseUrl+url1urlList.append(url2)return urlListURL = baseUrl+'thread0806.php?fid=16&search=&page='
UrlList = getUrl(URL)
print(UrlList)

在这个地址后面拼接1到N就是不同的列表页

图片页面

利用浏览器debug一下页面,图片基本上都是外链地址,以http或者https开头以jpg、png、gif结尾,写个正则表达式匹配这些地址,然后交给程序下载就OK了。

页面代码如下:

在下载过程中遇到了几个问题,就是有的页面会报403禁止访问等,应该是网站加了一些防止爬虫的手段,网上找了下加上header参数来模拟浏览器访问就解决了;

下载单个页面代码如下:

import urllib.request,socket,re,sys,os#定义文件保存路径
targetPath = "D:\\temp\\1024\\1"def openUrl(url):headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) '                            'Chrome/51.0.2704.63 Safari/537.36'}req = urllib.request.Request(url=url, headers=headers)res = urllib.request.urlopen(req)data = res.read()downImg(data)def downImg(data):for link,t in set(re.findall(r'([http|https]:[^\s]*?(jpg|png|gif))', str(data))):if link.startswith('s'):link='http'+linkelse:link='htt'+linkprint(link)try:opener=urllib.request.build_opener()opener.addheaders=[('User-Agent','Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1941.0 Safari/537.36')]urllib.request.install_opener(opener)urllib.request.urlretrieve(link,saveFile(link))except:print('失败')def saveFile(path):#检测当前路径的有效性if not os.path.isdir(targetPath):os.mkdir(targetPath)#设置每个图片的路径pos = path.rindex('/')t = os.path.join(targetPath,path[pos+1:])return turl = "http://xxxx.biz/htm_data/16/1611/2115193.html"
openUrl(url)

批量爬取

批量爬取有两个工作要做,第一for循环目标内的所有列表页,第二为了避免重复爬取,需要给每个页面建立唯一的文件夹,下次爬取的时候如果存在直接跳过。最后在理一下所有的爬取步骤:

循环地址栏->找出图片页列表->图片页分析找出图片地址->为图片页建立唯一的文件夹->开始下载页面图片

完整的代码如下:

import urllib.request,socket,re,sys,osbaseUrl='http://xxxx.biz/'
targetPath = "D:\\temp\\1024\\"def getContant(Weburl):Webheader= {'Upgrade-Insecure-Requests':'1','User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.103 Safari/537.36',}req = urllib.request.Request(url = Weburl,headers=Webheader)respose = urllib.request.urlopen(req)_contant = respose.read()respose.close()return str(_contant)def getUrl(URL):pageIndex = 1for i in range(1,int(pageIndex)+1):Weburl = URL + str(i)contant = getContant(Weburl)comp = re.compile(r'<a href="htm_data.{0,30}html" target="_blank" id=""><font color=g')urlList1 = comp.findall(contant)comp = re.compile(r'a href="(.*?)"')urlList2 = comp.findall(str(urlList1))urlList = []for url1 in urlList2:url2 = baseUrl+url1urlList.append(url2)return urlListdef openUrl(url):headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) '                            'Chrome/51.0.2704.63 Safari/537.36'}filePath=targetPath+url[-12:-5]#检测当前路径的有效性if not os.path.isdir(filePath):os.mkdir(filePath)req = urllib.request.Request(url=url, headers=headers)res = urllib.request.urlopen(req)data = res.read()downImg(data,filePath)else:print("已经下载过的地址跳过:"+url)print("filePath  "+filePath)def downImg(data,filePath):for link,t in set(re.findall(r'([http|https]:[^\s]*?(jpg|png|gif))', str(data))):if link.startswith('s'):link='http'+linkelse:link='htt'+linkprint(link)try:opener=urllib.request.build_opener()opener.addheaders=[('User-Agent','Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1941.0 Safari/537.36')]urllib.request.install_opener(opener)urllib.request.urlretrieve(link,saveFile(link,filePath))except:print('失败')def saveFile(path,filePath):#设置每个图片的路径pos = path.rindex('/')t = os.path.join(filePath,path[pos+1:])return tdef openPage(UrlList):for pageUlr in UrlList:try:print('正在下载地址:'+pageUlr)openUrl(pageUlr)except:print('地址:'+pageUlr+'下载失败')URL = baseUrl+'thread0806.php?fid=16&search=&page='
for num in range(0,20):#0-20页print("#######################################")print("##########总目录下载地址###############")print(URL+str(num))print("#######################################")print("#######################################")UrlList = getUrl(URL+str(num)) openPage(UrlList)

最后的爬取结果:

源代码地址:python-crawler
具体地址和源代码在一起

其它

关于python2和python3的争论,网站争论比较大python3不兼容pyhton2,很多第三方的类库暂时还没有支持python3等等,但是对于我们新手来说,肯定是往前看果断python3.

代码比较冗余几个地方还没有写好,还在慢慢学习中,目前只是搞的可以跑起来。还有几个问题没有解决,下载一段时间后会莫名其妙的断掉目前还么找到原因,后期看是否可以加上多线程来爬取可能会快一点,大家有什么更好的建议也可以提出来。

参考:

爬取豆瓣首页图片

使用Python爬取1024上的图片


作者:纯洁的微笑
出处:http://www.ityouknow.com/
版权所有,欢迎保留原文链接进行转载:)

python3爬取1024图片相关推荐

  1. python3爬取百度图片

    python3爬取百度图片 最终目的:能通过输入关键字进行搜索,爬取相应的图片存储到本地或者数据库 首先打开百度图片的网站,搜索任意一个关键字,比如说:水果,得到如下的界面 分析: 1.百度图片搜索结 ...

  2. 使用python3爬取美女图片

    给大佬们观赏观赏,爬取美女图片,各位大佬们小心身子哈. #目标:爬取网页所有图片并保存到本地 #目标url = http://www.umei.cc/tags/meishaonv_1.htm impo ...

  3. python3爬取淘女郎图片

    selenium+chrome 爬取淘女郎页面 分析https://www.taobao.com/markets/mm/mmku 这个页面,右键查看网页源代码搜索 img 竟然找不到图片标签,可以猜测 ...

  4. [Python3] 爬取百度图片到本地

    前言 因为需要一些图片素材,又不想一个个手动下载,遂通过爬虫来解放双手.在百度图片中搜索"汉服美女",然后以浏览器地址栏上的地址作为初始 URL.通过对 URL 分析知道 URL ...

  5. python3 爬取百度图片

    深度学习中,从网上下载大量的图片数据,肯定是必须的.作为python爬虫小白,记录一下此过程. 一.分析网页结构 1.在百度图片中输入狗,得到如下所示的网址 http://image.baidu.co ...

  6. Python3爬取Bing每日图片,并设置为电脑桌面

    文章目录 1 - 简述 2 - 核心代码 2.1 - 爬取BingImage 2.2 - 设置为桌面 2.3 - 设置为每日自动执行 3 - 完整代码 4 - 运行结果 作为鄙视链底层的"脚 ...

  7. python3爬虫之二:爬取网页图片

    Python3抓取网页图片 爬取的路径:URL = https://pixabay.com/zh/editors_choice/?media_type=illustration&pagi=3 ...

  8. python3爬取30张百度图片大量百度图片【王俊凯】

    python3爬取30张百度图片&大量百度图片[王俊凯] 30张图片(easy!) 好多好多图片! 复习C++之前先玩了一下爬虫,这学期属于是入了小凯的坑爬不出来了qwq 先看结果捏~ 学习了 ...

  9. Python3爬取迅捷语音转文字(包含持久化登陆和分片上传文件)

    前言 在这里我就不再一一介绍每个步骤的具体操作了,因为在上一次爬取今日头条数据的时候都已经讲的非常清楚了,所以在这里我只会在重点上讲述这个是这么实现的,如果想要看具体步骤请先去看我今日头条的文章内容, ...

最新文章

  1. python3中format方法_python3 自定制format格式化,很多很多的内置方法。。。。。。。。。。。...
  2. mac os x 添加 用户 所属 组
  3. linux修改rc.local权限,Linux 7 的 rc.local 文件需要 添加 +x 权限才会自动执行
  4. 公钥和私钥的简单通俗说明
  5. 模拟浏览器自动化测试工具Selenium之六设置代理篇
  6. docker mysql 无权限_Docker 中级篇
  7. java.util.zip.ZipException: error in opening zip file
  8. 全国计算机等级考试题库二级C操作题100套(第12套)
  9. 搜索推荐广告中的Position Bias:美团DPIN
  10. iOS键盘监听以及获取键盘高度
  11. Spring中bean实例化的三种方式:默认构造、静态工厂、实例工厂
  12. vue.js2.0 新手开发_vue.js2.0实战(1):搭建开发环境及构建项目
  13. html动态留言墙代码,JavaScript实现动态留言板
  14. 畅购商城_第9章SpringSecurity整合Oauth2
  15. 3dmax文件格式转换——.max 转换为 .flt(解决转换后.flt没有纹理贴图的问题)
  16. 数据库原理第二章测验(标黑的为答案)
  17. 未来医疗大数据想象空间大
  18. 【二十】 H.266/VVC | 仿射运动估计AMVP继承相邻块的运动信息函数 | addAffineMVPCandUnscaled函数
  19. QQ拼音Vista平台试用:行云流水 完美兼容
  20. let const var 区别详解

热门文章

  1. Powermill汽车件模具五轴数控CNC编程视频教程
  2. 唤客猫获客营销之全员激励
  3. 基于C++实现(控制台+界面)通讯录管理系统【100010012】
  4. Educoder - Java类和对象之static关键字之求圆环面积和周长
  5. Dev-C++5.11游戏创作之躺平发育
  6. 《C语言点滴》一第1章 程序猿 程序媛1.1 装备篇
  7. rk3288-android8.1-OV13850
  8. 西安电子科技大学通院811电院821考研上岸经验分享(一)
  9. linux wget 图片,wget命令批量下载图片
  10. 在linux下刷B站方法总结