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 相关文章推荐
Django查找网站项目根目录和对正则表达式的支持
Jul 15 Python
Python的Django框架中forms表单类的使用方法详解
Jun 21 Python
python对象及面向对象技术详解
Jul 19 Python
深入理解python中的select模块
Apr 23 Python
Python制作词云的方法
Jan 03 Python
Python socket套接字实现C/S模式远程命令执行功能案例
Jul 06 Python
django解决跨域请求的问题
Nov 11 Python
Python3 修改默认环境的方法
Feb 16 Python
解决c++调用python中文乱码问题
Jul 29 Python
关于多种方式完美解决Python pip命令下载第三方库的问题
Dec 21 Python
selenium如何定位span元素的实现
Jan 13 Python
Python爬虫后获取重定向url的两种方法
Jan 19 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数组
2006/10/09 PHP
详解:――如何将图片储存在数据库里
2006/12/05 PHP
PHP模板引擎smarty详细介绍
2015/05/26 PHP
基于PHP实现简单的随机抽奖小程序
2016/01/05 PHP
Prototype 学习 工具函数学习($w,$F方法)
2009/07/12 Javascript
jquery easyui combobox模糊过滤(示例代码)
2013/11/30 Javascript
函数window.open实现关闭所有的子窗口
2015/08/03 Javascript
18个非常棒的jQuery代码片段
2015/11/02 Javascript
jQuery实现带有动画效果的回到顶部和底部代码
2015/11/04 Javascript
String字符串截取的四种方式总结
2016/11/28 Javascript
wap手机端解决返回上一页的js实例
2016/12/08 Javascript
Bootstrap table使用方法详细介绍
2016/12/09 Javascript
JS正则表达式修饰符中multiline(/m)用法分析
2016/12/27 Javascript
Vue.js原理分析之observer模块详解
2017/02/17 Javascript
详解用webpack把我们的业务模块分开打包的方法
2017/07/20 Javascript
JavaScript实现的贝塞尔曲线算法简单示例
2018/01/30 Javascript
实例详解vue.js浅度监听和深度监听及watch用法
2018/08/16 Javascript
vue-rx的初步使用教程
2018/09/21 Javascript
详解JavaScript栈内存与堆内存
2019/04/04 Javascript
4 种滚动吸顶实现方式的比较
2019/04/09 Javascript
JavaScript中十种一步拷贝数组的方法实例详解
2019/04/22 Javascript
vue + typescript + video.js实现 流媒体播放 视频监控功能
2019/07/07 Javascript
纯异步nodejs文件夹(目录)复制功能
2019/09/03 NodeJs
Vue.js如何使用Socket.IO的示例代码
2019/09/05 Javascript
jquery轻量级数字动画插件countUp.js使用详解
2019/10/17 jQuery
Python出现segfault错误解决方法
2016/04/16 Python
Python读csv文件去掉一列后再写入新的文件实例
2017/12/28 Python
基于python实现蓝牙通信代码实例
2019/11/19 Python
利用python+request通过接口实现人员通行记录上传功能
2021/01/13 Python
师范生自荐信模板
2014/05/28 职场文书
党支部群众路线整改措施思想汇报
2014/10/10 职场文书
违章停车检讨书
2014/10/21 职场文书
医院见习报告范文
2014/11/03 职场文书
求职信:会计求职的写作技巧
2019/04/24 职场文书
在python中实现导入一个需要传参的模块
2021/05/12 Python
Ruby GDBM操作简介及数据存储原理
2022/04/19 Ruby