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编写简单网络爬虫抓取视频下载资源
Nov 04 Python
Python 正则表达式(转义问题)
Dec 15 Python
python 实现对数据集的归一化的方法(0-1之间)
Jul 17 Python
Python生成器的使用方法和示例代码
Mar 04 Python
python基于paramiko将文件上传到服务器代码实现
Jul 08 Python
python 控制Asterisk AMI接口外呼电话的例子
Aug 08 Python
python+jinja2实现接口数据批量生成工具
Aug 28 Python
python调用matplotlib模块绘制柱状图
Oct 18 Python
使用pymysql查询数据库,把结果保存为列表并获取指定元素下标实例
May 15 Python
使用python画出逻辑斯蒂映射(logistic map)中的分叉图案例
Dec 11 Python
将Python代码打包成.exe可执行文件的完整步骤
May 12 Python
python基础之模块的导入
Oct 24 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
5.PHP的其他功能
2006/10/09 PHP
ThinkPHP提交表单时默认自动转义的解决方法
2014/11/25 PHP
简单谈谈PHP中strlen 函数
2016/02/27 PHP
PHP排序算法之快速排序(Quick Sort)及其优化算法详解
2018/04/21 PHP
javascript当onmousedown、onmouseup、onclick同时应用于同一个标签节点Element
2010/01/05 Javascript
JavaScript使用function定义对象并调用的方法
2015/03/23 Javascript
js+html5操作sqlite数据库的方法
2016/02/02 Javascript
js实现精确到秒的倒计时效果
2016/05/29 Javascript
浅谈js中function的参数默认值
2017/02/20 Javascript
node.js中实现kindEditor图片上传功能的方法教程
2017/04/26 Javascript
详解如何提高 webpack 构建 Vue 项目的速度
2017/07/03 Javascript
详解使用nvm管理多版本node的方法
2017/08/30 Javascript
解决vue中使用proxy配置不同端口和ip接口问题
2019/08/14 Javascript
深入理解令牌认证机制(token)
2019/08/22 Javascript
nodejs一个简单的文件服务器的创建方法
2019/09/13 NodeJs
js实现旋转的星空效果
2019/11/01 Javascript
Python 序列化 pickle/cPickle模块使用介绍
2014/11/30 Python
详解JavaScript编程中的window与window.screen对象
2015/10/26 Python
Python+matplotlib+numpy绘制精美的条形统计图
2018/01/02 Python
Django中数据库的数据关系:一对一,一对多,多对多
2018/10/21 Python
python 监测内存和cpu的使用率实例
2019/11/28 Python
Django中使用MySQL5.5的教程
2019/12/18 Python
Python selenium页面加载慢超时的解决方案
2020/03/18 Python
在jupyter notebook 添加 conda 环境的操作详解
2020/04/10 Python
Pandas对DataFrame单列/多列进行运算(map, apply, transform, agg)
2020/06/14 Python
解决python 虚拟环境删除包无法加载的问题
2020/07/13 Python
Django 实现图片上传和下载功能
2020/12/31 Python
基于ccs3的timeline时间线实现方法
2020/04/30 HTML / CSS
澳大利亚家用电器在线商店:Billy Guyatts
2020/05/05 全球购物
对标管理实施方案
2014/03/12 职场文书
学雷锋活动总结范文
2014/04/25 职场文书
先进员工事迹材料
2014/12/20 职场文书
年度考核个人总结
2015/03/06 职场文书
2015年保安个人工作总结
2015/04/02 职场文书
工伤事故赔偿协议书
2015/08/06 职场文书
JS前端可视化canvas动画原理及其推导实现
2022/08/05 Javascript