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框架中render_to_response()函数的使用方法
Jul 16 Python
Python爬虫实现网页信息抓取功能示例【URL与正则模块】
May 18 Python
Django objects.all()、objects.get()与objects.filter()之间的区别介绍
Jun 12 Python
Python网络爬虫与信息提取(实例讲解)
Aug 29 Python
Python使用爬虫爬取静态网页图片的方法详解
Jun 05 Python
python使用matplotlib绘制热图
Nov 07 Python
对django xadmin自定义菜单的实例详解
Jan 03 Python
python爬虫项目设置一个中断重连的程序的实现
Jul 26 Python
python excel转换csv代码实例
Aug 26 Python
Python实现socket非阻塞通讯功能示例
Nov 06 Python
Python 爬取淘宝商品信息栏目的实现
Feb 06 Python
用Python编写简单的gRPC服务的详细过程
Jul 04 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中isset与empty函数的困惑与用法分析
2019/07/05 PHP
Yii使用EasyWechat实现小程序获取用户的openID的方法
2020/04/29 PHP
一端时间轮换的广告
2006/06/26 Javascript
PJ Blog修改-禁止复制的代码和方法
2006/10/25 Javascript
改进:论坛UBB代码自动插入方式
2006/12/22 Javascript
javascript 操作cookies及正确使用cookies的属性
2009/10/15 Javascript
Jquery AJAX 框架的使用方法
2009/11/03 Javascript
JQuery实现的在新窗口打开链接的方法小结
2010/04/22 Javascript
通过JavaScript使Div居中并随网页大小改变而改变
2013/06/24 Javascript
使用JavaScript刷新网页的方法
2015/06/04 Javascript
微信企业号开发之微信考勤百度地图定位
2015/09/11 Javascript
javascript和jquery实现用户登录验证
2016/05/04 Javascript
AngularJS入门教程之Scope(作用域)
2016/07/27 Javascript
Angular JS 生成动态二维码的方法
2017/02/23 Javascript
JS自动生成动态HTML验证码页面
2017/06/14 Javascript
underscore之Collections_动力节点Java学院整理
2017/07/10 Javascript
基于vue2.0实现简单轮播图
2017/11/27 Javascript
Angular异步变同步处理方法
2018/08/13 Javascript
在小程序Canvas中使用measureText的方法示例
2018/10/19 Javascript
AntV F2和vue-cli构建移动端可视化视图过程详解
2019/10/08 Javascript
[02:38]2018年度DOTA2最佳劣单位选手-完美盛典
2018/12/17 DOTA
解读Python中degrees()方法的使用
2015/05/18 Python
python异常处理之try finally不报错的原因
2020/05/18 Python
css3 伪元素和伪类选择器详解
2014/09/04 HTML / CSS
html5 实现客户端验证上传文件的大小(简单实例)
2016/05/15 HTML / CSS
Avène雅漾美国官方网站:敏感肌肤护理专家
2016/10/24 全球购物
简单介绍Object类的功能、常用方法
2013/10/02 面试题
.NET程序员的数据库面试题
2012/10/10 面试题
Linux操作面试题
2012/05/16 面试题
土木工程毕业生自荐信
2013/11/12 职场文书
博士生导师推荐信
2014/07/08 职场文书
人身意外保险授权委托书
2014/10/01 职场文书
离婚纠纷代理词
2015/05/23 职场文书
Java实现多文件上传功能
2021/06/30 Java/Android
html5实现点击弹出图片功能
2021/07/16 HTML / CSS
Win11局域网共享权限在哪里设置? Win11高级共享的设置技巧
2022/04/05 数码科技