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 相关文章推荐
Python标准库defaultdict模块使用示例
Apr 28 Python
Python中的super()方法使用简介
Aug 14 Python
Python 功能和特点(新手必学)
Dec 30 Python
python安装oracle扩展及数据库连接方法
Feb 21 Python
Python实现统计代码行的方法分析
Jul 12 Python
Python使用smtp和pop简单收发邮件完整实例
Jan 09 Python
火车票抢票python代码公开揭秘!
Mar 08 Python
Python实现将Excel转换成xml的方法示例
Aug 25 Python
python抓取京东小米8手机配置信息
Nov 13 Python
python图的深度优先和广度优先算法实例分析
Oct 26 Python
python实现按首字母分类查找功能
Oct 31 Python
Python可变与不可变数据和深拷贝与浅拷贝
Apr 06 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/12/21 PHP
Php Image Resize图片大小调整的函数代码
2011/01/17 PHP
分享PHP函数实现数字与文字分页代码
2015/07/28 PHP
php获取用户真实IP和防刷机制的实例代码
2018/11/28 PHP
静态的动态续篇之来点XML
2006/08/15 Javascript
Ext 表单布局实例代码
2009/04/30 Javascript
jquery插件制作 图片走廊 gallery
2012/08/17 Javascript
javascript跟随滚动效果插件代码(javascript Follow Plugin)
2013/08/03 Javascript
JAVASCRIPT模式窗口中下载文件无法接收iframe的流
2013/10/11 Javascript
JS批量操作CSS属性详细解析
2013/12/16 Javascript
JS对象转换为Jquery对象示例
2014/01/26 Javascript
js判断当前浏览器类型,判断IE浏览器方法
2014/06/02 Javascript
在myeclipse中如何加入jquery代码提示功能
2014/06/03 Javascript
js 动态修改css文件的方法
2014/08/05 Javascript
jquery ajax结合thinkphp的getjson实现跨域的方法
2016/06/06 Javascript
轮播的简单实现方法
2016/07/28 Javascript
Bootstrap select下拉联动(jQuery cxselect)
2017/01/04 Javascript
微信小程序图表插件(wx-charts)实例代码
2017/01/17 Javascript
基于JQuery及AJAX实现名人名言随机生成器
2017/02/10 Javascript
vue中实现移动端的scroll滚动方法
2018/03/03 Javascript
nodeJs爬虫的技术点总结
2018/05/13 NodeJs
详解Vue-Router源码分析路由实现原理
2019/05/15 Javascript
Python使用matplotlib实现在坐标系中画一个矩形的方法
2015/05/20 Python
【Python】Python的urllib模块、urllib2模块批量进行网页下载文件
2016/11/19 Python
python机器学习理论与实战(六)支持向量机
2018/01/19 Python
Python注释、分支结构、循环结构、伪“选择结构”用法实例分析
2020/01/09 Python
Python使用Selenium模拟浏览器自动操作功能
2020/09/08 Python
python 实现围棋游戏(纯tkinter gui)
2020/11/13 Python
语文教育专业应届生求职信
2013/11/23 职场文书
公司门卫工作职责
2014/06/28 职场文书
幸福中国演讲稿
2014/09/12 职场文书
上课随便讲话检讨书
2014/09/12 职场文书
检讨书怎么写
2015/01/23 职场文书
MySQL的Query Cache图文详解
2021/07/01 MySQL
浅谈TypeScript 索引签名的理解
2021/10/16 Javascript
vue使用echarts实现折线图
2022/03/21 Vue.js