Python制作豆瓣图片的爬虫


Posted in Python onDecember 28, 2017

前段时间自学了一段时间的Python,想着浓一点项目来练练手。看着大佬们一说就是爬了100W+的数据就非常的羡慕,不过对于我这种初学者来说,也就爬一爬图片。

我相信很多人的第一个爬虫程序都是爬去贴吧的图片,嗯,我平时不玩贴吧,加上我觉得豆瓣挺良心的,我就爬了豆瓣首页上面的图片。其实最刚开始是想爬全站,后来一想我这简直是脑子犯抽,全站的图片爬下来得有多少,再说这个只是练一下手,所以就只爬取了首页上的图片。废话不多说 开始代码。

首先是主文件的代码:

import re
from html_downloder import HtmlDownloader
from html_downloder import Image

"'起始URL'"
url = "https://www.douban.com"
"'保存目录'"
image_path = "F:\source\Python\爬虫\ImageGet\Image%s.jpg"
"'定义实体类'"
downloader = HtmlDownloader()
html = downloader.download(url)
"'SaveFile(html, html_path)'"
html = html.decode('utf-8')
"'正则表达式'"
reg1 = r'="(https://img[\S]*?[jpg|png])"'
"'提取图片的URL'"
dbdata = re.findall(reg1, html)
imgsave = Image()

"'下载保存图片'"
imgsave.ImageGet(dbdata, image_path)

我们打开豆瓣首页然后看一下里面图片的url会发现

Python制作豆瓣图片的爬虫

Python制作豆瓣图片的爬虫

都是以“=”等号开头,后面接双引号,中间都是https://img,末尾以双引号结束。

因此我们的正则表达式可以写成 reg1 = r'="(https://img[\S]*?[jpg|png])"'

在这个表达式中"[]"中括号里面的东西会作为一个整体,其中[\S]表示大小写字母和数字,[jpg|png]表示以png结尾或者jpg结尾(在这次爬虫中并没有包括gif,因为打开gif的url发现是空白)。

然后是html_downloder.py的代码:

# file: html_downloader.py
 
 import urllib.request
 import urllib.error
 import time

 class HtmlDownloader(object):
  def download(self, url):
   if url is None:
    return None
   try:
    header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64)'}
    "'发出请求'"
    request = urllib.request.Request(url=url, headers=header)
    "'获取结果'"
    response = urllib.request.urlopen(url)
   except urllib.error.URLError as e:
    if hasattr(e, "code"):
     print(e.code)
    if hasattr(e, "reason"):
     print(e.reason)
   if response.getcode() != 200:
    return None
   html = response.read()
   response.close()
   return html

 class Image (object):
  def ImageGet(self, imageurl, image_path):
   x = 0
   for li in imageurl:
    urllib.request.urlretrieve(li, image_path % x)
    x = x + 1
    "'休眠5s以免给服务器造成严重负担'"
    time.sleep(5)
这个文件的代码主要是负责下载html网页和下载具体的图片。

接下来就可以在保存路径对应的文件夹中中看到下载的图片了

Python制作豆瓣图片的爬虫

至此,爬虫告一段落,离大佬的路还远得很,继续加油!!

Python 相关文章推荐
python3.3教程之模拟百度登陆代码分享
Jan 16 Python
Python ORM框架SQLAlchemy学习笔记之数据添加和事务回滚介绍
Jun 10 Python
剖析Python的Tornado框架中session支持的实现代码
Aug 21 Python
完美解决python遍历删除字典里值为空的元素报错问题
Sep 11 Python
python OpenCV学习笔记直方图反向投影的实现
Feb 07 Python
Python装饰器用法示例小结
Feb 11 Python
Python高级用法总结
May 26 Python
利用python如何处理百万条数据(适用java新手)
Jun 06 Python
python url 参数修改方法
Dec 26 Python
Python小白不正确的使用类变量实例
May 29 Python
python中如何设置代码自动提示
Jul 15 Python
python能做哪些生活有趣的事情
Sep 09 Python
浅谈Python使用Bottle来提供一个简单的web服务
Dec 27 #Python
python编程实现12306的一个小爬虫实例
Dec 27 #Python
python导出chrome书签到markdown文件的实例代码
Dec 27 #Python
Python类的继承和多态代码详解
Dec 27 #Python
快速查询Python文档方法分享
Dec 27 #Python
Java及python正则表达式详解
Dec 27 #Python
python matplotlib画图实例代码分享
Dec 27 #Python
You might like
PHP模拟SQL Server的两个日期处理函数
2006/10/09 PHP
php基础教程
2015/08/26 PHP
php 问卷调查结果统计
2015/10/08 PHP
PHP单例模式模拟Java Bean实现方法示例
2018/12/07 PHP
用jquery来定位
2007/02/20 Javascript
javascript 兼容FF的onmouseenter和onmouseleave的代码
2008/07/19 Javascript
JS运行耗时操作的延时显示方法
2010/11/19 Javascript
JavaScript 事件绑定及深入
2015/04/13 Javascript
在JavaScript中处理字符串之fontcolor()方法的使用
2015/06/08 Javascript
jquery点击缩略图切换视频播放特效代码分享
2015/09/15 Javascript
12个超实用的JQuery代码片段
2015/11/02 Javascript
JavaScript实现带播放列表的音乐播放器实例分享
2016/03/07 Javascript
微信小程序多张图片上传功能
2017/06/07 Javascript
JS中的Replace()传入函数时的用法详解
2017/09/11 Javascript
微信小程序实现手势图案锁屏功能
2018/01/30 Javascript
jQuery实现为table表格动态添加或删除tr功能示例
2019/02/19 jQuery
python实现的jpg格式图片修复代码
2015/04/21 Python
python脚本设置超时机制系统时间的方法
2016/02/21 Python
python逆序打印各位数字的方法
2018/06/25 Python
django 发送邮件和缓存的实现代码
2018/07/18 Python
python生成n个元素的全组合方法
2018/11/13 Python
Python自动化之数据驱动让你的脚本简洁10倍【推荐】
2019/06/04 Python
Pytorch技巧:DataLoader的collate_fn参数使用详解
2020/01/08 Python
pytorch 模型的train模式与eval模式实例
2020/02/20 Python
Keras官方中文文档:性能评估Metrices详解
2020/06/15 Python
Django model重写save方法及update踩坑详解
2020/07/27 Python
python中random模块详解
2021/03/01 Python
新加坡第一的杂货零售商:NTUC FairPrice
2020/12/05 全球购物
2014年迎新年活动方案
2014/02/19 职场文书
市级青年文明号申报材料
2014/05/26 职场文书
大学生个人求职信例文
2014/07/07 职场文书
"9.18"国耻日演讲稿范文
2014/09/14 职场文书
毕业典礼主持词
2015/06/29 职场文书
六五普法学习心得体会
2016/01/21 职场文书
公司趣味运动会开幕词
2016/03/04 职场文书
Spring中的使用@Async异步调用方法
2021/11/01 Java/Android