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抓取京东价格分析京东商品价格走势
Jan 09 Python
python实现批量获取指定文件夹下的所有文件的厂商信息
Sep 28 Python
Python守护进程(daemon)代码实例
Mar 06 Python
python入门基础之用户输入与模块初认识
Nov 14 Python
Python爬虫代理IP池实现方法
Jan 05 Python
Python实现动态加载模块、类、函数的方法分析
Jul 18 Python
python中Switch/Case实现的示例代码
Nov 09 Python
[原创]教女朋友学Python3(二)简单的输入输出及内置函数查看
Nov 30 Python
Python Flask前后端Ajax交互的方法示例
Jul 31 Python
Python----数据预处理代码实例
Mar 20 Python
python算法与数据结构之单链表的实现代码
Jun 27 Python
Pycharm连接gitlab实现过程图解
Sep 01 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
discuz7 phpMysql操作类
2009/06/21 PHP
php HandlerSocket的使用
2011/05/02 PHP
Smarty foreach控制循环次数的实现详解
2013/07/03 PHP
php过滤表单提交的html等危险代码
2014/11/03 PHP
php获得文件大小和文件创建时间的方法
2015/03/13 PHP
PHP cURL初始化和执行方法入门级代码
2015/05/28 PHP
PHP实现简单实用的验证码类
2015/07/29 PHP
JavaScript判断DOM何时加载完毕的技巧
2012/11/11 Javascript
HTML复选框和单选框 checkbox和radio事件介绍
2012/12/12 Javascript
利用javascript实现禁用网页上所有文本框,下拉菜单,多行文本域
2013/12/14 Javascript
javascript中checkbox使用方法实例演示
2015/11/19 Javascript
jQuery Easyui实现左右布局
2016/01/26 Javascript
JS表单验证的代码(常用)
2016/04/08 Javascript
jQuery和JavaScript节点插入元素的方法对比
2016/11/18 Javascript
JavaScript的变量声明提升问题浅析(Hoisting)
2016/11/30 Javascript
ionic2 tabs 图标自定义实例
2017/03/08 Javascript
深入理解AngularJs-scope的脏检查(一)
2017/06/19 Javascript
微信小程序项目实践之主页tab选项实现
2018/07/18 Javascript
微信小程序 checkbox使用实例解析
2019/09/09 Javascript
Python设计模式之观察者模式实例
2014/04/26 Python
Python3下错误AttributeError: ‘dict’ object has no attribute’iteritems‘的分析与解决
2017/07/06 Python
python原类、类的创建过程与方法详解
2019/07/19 Python
关于numpy.where()函数 返回值的解释
2019/12/06 Python
利用CSS3的transform做的动态时钟效果
2011/09/21 HTML / CSS
在网上学习全世界最好的课程:Coursera
2017/11/07 全球购物
美国餐厅用品和厨房设备批发网站:KaTom Restaurant Supply
2018/01/27 全球购物
美国医生配方营养补充剂供应商:Healthy Directions
2019/07/10 全球购物
高一地理教学反思
2014/01/18 职场文书
家长学校工作方案
2014/05/07 职场文书
2015小学五年级班主任工作总结
2015/05/21 职场文书
运动员入场前导词
2015/07/20 职场文书
严以用权学习心得体会
2016/01/12 职场文书
2017寒假社会实践心得体会范文
2016/01/14 职场文书
《青山不老》教学反思
2016/02/22 职场文书
2019餐饮行业创业计划书!
2019/06/27 职场文书
利用JuiceFS使MySQL 备份验证性能提升 10 倍
2022/03/17 MySQL