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和C/C++交互的几种方法总结
May 11 Python
python 地图经纬度转换、纠偏的实例代码
Aug 06 Python
python调用matlab的m自定义函数方法
Feb 18 Python
Python批量删除只保留最近几天table的代码实例
Apr 01 Python
selenium处理元素定位点击无效问题
Jun 12 Python
python爬虫 urllib模块反爬虫机制UA详解
Aug 20 Python
Python 爬虫实现增加播客访问量的方法实现
Oct 31 Python
Python基于stuck实现scoket文件传输
Apr 02 Python
python使用numpy中的size()函数实例用法详解
Jan 29 Python
python中threading和queue库实现多线程编程
Feb 06 Python
Python实现为PDF去除水印的示例代码
Apr 03 Python
Python实现视频自动打码的示例代码
Apr 08 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笔记之:数据类型与常量的使用分析
2013/05/14 PHP
php广告加载类用法实例
2014/09/23 PHP
PHP数组去重比较快的实现方式
2016/01/19 PHP
Laravel框架分页实现方法分析
2018/06/12 PHP
Jquery调用webService远程访问出错的解决方法
2010/05/21 Javascript
jQuery中delegate()方法用法实例
2015/01/19 Javascript
js代码验证手机号码和电话号码是否合法
2015/07/30 Javascript
js组件SlotMachine实现图片切换效果制作抽奖系统
2016/04/17 Javascript
javaScript知识点总结(必看篇)
2016/06/10 Javascript
javascript实现右下角广告框效果
2017/02/01 Javascript
微信小程序实现天气预报功能
2018/07/18 Javascript
基于JS+HTML实现弹窗提示是否确认提交功能
2020/06/17 Javascript
JS实现无限轮播无倒退效果
2020/09/21 Javascript
JS算法教程之字符串去重与字符串反转
2020/12/15 Javascript
[11:01]2014DOTA2西雅图邀请赛 冷冷带你探秘威斯汀
2014/07/08 DOTA
python列表与元组详解实例
2013/11/01 Python
跟老齐学Python之画圈还不简单吗?
2014/09/20 Python
Python字符串格式化
2015/06/15 Python
python编程实现归并排序
2017/04/14 Python
Python基于Logistic回归建模计算某银行在降低贷款拖欠率的数据示例
2019/01/23 Python
Python3安装psycopy2以及遇到问题解决方法
2019/07/03 Python
Python进行统计建模
2020/08/10 Python
使用tensorflow进行音乐类型的分类
2020/08/14 Python
python3实现名片管理系统(控制台版)
2020/11/29 Python
利用CSS3实现毛玻璃效果示例源码
2016/09/25 HTML / CSS
使用jTopo给Html5 Canva中绘制的元素添加鼠标事件
2014/05/15 HTML / CSS
canvas需要在标签里直接定义宽高
2014/12/17 HTML / CSS
Theory美国官网:后现代都市风时装品牌
2018/05/09 全球购物
美国狗旅行和户外用品领先供应商:kurgo
2020/08/18 全球购物
公司司机岗位职责
2014/02/07 职场文书
超市促销活动总结
2014/07/01 职场文书
主要领导对照检查材料
2014/08/26 职场文书
工会2014法制宣传日活动总结
2014/11/01 职场文书
高三语文教学反思
2016/02/16 职场文书
Linux安装apache服务器的配置过程
2021/11/27 Servers
Vite + React从零开始搭建一个开源组件库
2022/06/25 Javascript