Python爬虫爬取煎蛋网图片代码实例


Posted in Python onDecember 16, 2019

这篇文章主要介绍了Python爬虫爬取煎蛋网图片代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

今天,试着爬取了煎蛋网的图片。

用到的包:

  • urllib.request
  • os

分别使用几个函数,来控制下载的图片的页数,获取图片的网页,获取网页页数以及保存图片到本地。过程简单清晰明了

直接上源代码:

import urllib.request
import os


def url_open(url):
  req = urllib.request.Request(url)
  req.add_header('user-agent','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36')
  response = urllib.request.urlopen(url)
  html = response.read()

  return html

def get_page(url):
  html = url_open(url).decode('utf-8')

  a = html.find('current-comment-page')+23
  b = html.find(']',a)

  return html[a:b]


def find_imgs(url):
  html = url_open(url).decode('utf-8')
  img_addrs = []

  a = html.find('img src=')

  while a != -1:
    b = html.find('.jpg',a ,a+255)
    if b != -1:
      img_addrs.append('https:'+html[a+9:b+4]) # 'img src='为9个偏移 '.jpg'为4个偏移
    else:
      b = a+9
    a = html.find('img src=', b)

  return img_addrs


def save_imgs(folder, img_addrs):
  for each in img_addrs:
    filename = each.split('/')[-1]
    with open(filename, 'wb') as f:
      img = url_open(each)
      f.write(img)
    print(img_addrs)

def download_mm(folder = 'xxoo', pages = 5):
  os.mkdir(folder)
  os.chdir(folder)

  url = 'http://jandan.net/ooxx/'
  page_num = int(get_page(url))

  for i in range(pages):
    page_num -= i
    page_url = url + 'page-'+ str(page_num) + '#comments'
    img_addrs = find_imgs(page_url)
    save_imgs(folder, img_addrs)

if __name__ == '__main__':
  download_mm()

其中在主函数download_mm()中,将pages设置在了5面。

本来设置的是10,但是在程序执行的过程中。出现了404ERROR错误

即imgae_url出现了错误。尝试着在save_img()函数中加入了测试代码:print(img_addrs),

Python爬虫爬取煎蛋网图片代码实例

想到会不会是因为后面页数的图片,img_url的格式出现了改变,导致404,所以将pages改成5,

再次运行,结果没有问题,图片能正常下载:

Python爬虫爬取煎蛋网图片代码实例

仔细观察发现,刚好是在第五面的图片往后,出现了不可下载的问题(404)。所以在煎蛋网上,我们直接跳到第6面查看图片的url。

Python爬虫爬取煎蛋网图片代码实例

上图是后5面的图片url,下图是前5面的图片url

Python爬虫爬取煎蛋网图片代码实例

而源代码中,寻找的图片url为使用find()函数,进行定为<img src=‘'> <.jpg>中的图片url,所以后5面出现的a href无法匹配,即出现了404 ERROR。如果想要下载后续的图片,需要重新添加一个url定位

即在find中将 img src改成 a href,偏移量也需要更改。

总结:

使用find()来定位网页标签确实太过low,所以以后在爬虫中要尽量使用正则表达式和Beautifulsoup包来提高效率,而这两项我还不是特别熟,所以需要更多的训练。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python基础教程之基本数据类型和变量声明介绍
Aug 29 Python
python中while循环语句用法简单实例
May 07 Python
在Python的struct模块中进行数据格式转换的方法
Jun 17 Python
python通过opencv实现批量剪切图片
Nov 13 Python
Python实现Kmeans聚类算法
Jun 10 Python
浅谈Python里面小数点精度的控制
Jul 16 Python
python实现在函数中修改变量值的方法
Jul 16 Python
浅谈Python中函数的定义及其调用方法
Jul 19 Python
在OpenCV里使用特征匹配和单映射变换的代码详解
Oct 23 Python
在Python中使用MongoEngine操作数据库教程实例
Dec 03 Python
通过Turtle库在Python中绘制一个鼠年福鼠
Feb 03 Python
python实现启动一个外部程序,并且不阻塞当前进程
Dec 05 Python
python实现监控阿里云账户余额功能
Dec 16 #Python
Python实现密码薄文件读写操作
Dec 16 #Python
如何基于Python实现电子邮件的发送
Dec 16 #Python
Python如何基于selenium实现自动登录博客园
Dec 16 #Python
Python正则表达式急速入门(小结)
Dec 16 #Python
如何基于Python制作有道翻译小工具
Dec 16 #Python
django框架单表操作之增删改实例分析
Dec 16 #Python
You might like
php disk_free_space 返回目录可用空间
2010/05/10 PHP
Thinkphp中的curd应用实用要点
2015/01/04 PHP
Yii配置与使用memcached缓存的方法
2016/07/13 PHP
完美解决thinkphp唯一索引重复时出错的问题
2017/03/31 PHP
关于laravel5.5的定时任务详解(demo)
2019/10/23 PHP
javascript 原型模式实现OOP的再研究
2009/04/09 Javascript
File, FileReader 和 Ajax 文件上传实例分析(php)
2011/04/27 Javascript
关闭ie窗口清除Session的解决方法
2014/01/10 Javascript
jQuery fancybox在ie浏览器下无法显示关闭按钮的解决办法
2016/02/19 Javascript
AngularJS中的API(接口)简单实现
2016/07/28 Javascript
AngularJS 模块化详解及实例代码
2016/09/14 Javascript
JQueryEasyUI框架下的combobox的取值和绑定的方法
2017/01/22 Javascript
javascript 开发之网页兼容各种浏览器
2017/09/28 Javascript
Vue2.0用户权限控制解决方案的示例
2018/02/10 Javascript
vue生命周期实例小结
2018/08/15 Javascript
js模拟实现百度搜索
2020/06/28 Javascript
JS继承实现方法及优缺点详解
2020/09/02 Javascript
[00:42]《辉夜杯》—职业组预选赛12月3日15点 正式打响
2015/12/03 DOTA
使用简单工厂模式来进行Python的设计模式编程
2016/03/01 Python
利用python3随机生成中文字符的实现方法
2017/11/24 Python
python3+PyQt5泛型委托详解
2018/04/24 Python
pandas 把数据写入txt文件每行固定写入一定数量的值方法
2018/12/28 Python
详解python selenium 爬取网易云音乐歌单名
2019/03/28 Python
Django model update的多种用法介绍
2020/03/28 Python
Pytorch Tensor的索引与切片例子
2019/08/18 Python
Python 格式化输出_String Formatting_控制小数点位数的实例详解
2020/02/04 Python
Python多重继承之菱形继承的实例详解
2020/02/12 Python
Python 字符串池化的前提
2020/07/03 Python
python自动提取文本中的时间(包含中文日期)
2020/08/31 Python
python字符串拼接+和join的区别详解
2020/12/03 Python
Keds官方网站:购买帆布运动鞋和经典皮鞋
2016/11/12 全球购物
导航工程专业自荐信
2014/09/02 职场文书
合伙开公司协议书范本
2014/10/28 职场文书
2014年销售部工作总结
2014/12/01 职场文书
明星邀请函
2015/02/02 职场文书
VUE解决跨域问题Access to XMLHttpRequest at
2022/05/06 Vue.js