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多进程编程
Jun 12 Python
详解Python map函数及Python map()函数的用法
Nov 16 Python
Python八大常见排序算法定义、实现及时间消耗效率分析
Apr 27 Python
python集合比较(交集,并集,差集)方法详解
Sep 13 Python
Pandas数据离散化原理及实例解析
Nov 16 Python
python常用数据重复项处理方法
Nov 22 Python
pytorch 实现模型不同层设置不同的学习率方式
Jan 06 Python
利用Tensorflow的队列多线程读取数据方式
Feb 05 Python
详解用Pytest+Allure生成漂亮的HTML图形化测试报告
Mar 31 Python
Python 如何实现数据库表结构同步
Sep 29 Python
python 解决微分方程的操作(数值解法)
May 26 Python
总结Python连接CS2000的详细步骤
Jun 23 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设计模式 php实现观察者模式(Observer)
2015/12/09 PHP
PHP类的特性实例分析
2016/09/28 PHP
jQuery使用手册之 事件处理
2007/03/24 Javascript
JavaScript QueryString解析类代码
2010/01/17 Javascript
javascript中关于执行环境的杂谈
2011/08/14 Javascript
js 获取时间间隔实现代码
2014/05/12 Javascript
PHP实现的各种中文编码转换类分享
2015/01/23 Javascript
javascript 实现map集合
2015/04/03 Javascript
jQuery的几个我们必须了解的特点
2015/05/03 Javascript
jquery中validate与form插件提交的方式小结
2016/03/26 Javascript
JS使用正则表达式实现关键字替换加粗功能示例
2016/08/03 Javascript
全面解析Bootstrap表单样式的使用
2016/09/09 Javascript
js内置对象处理_打印学生成绩单的简单实现
2016/09/24 Javascript
新手vue构建单页面应用实例代码
2017/09/18 Javascript
判断滚动条滑到底部触发事件(实例讲解)
2017/11/15 Javascript
vue双向数据绑定知识点总结
2018/04/18 Javascript
node中间层实现文件上传功能
2018/06/11 Javascript
node中IO以及定时器优先级详解
2019/05/10 Javascript
vue项目中监听手机物理返回键的实现
2020/01/18 Javascript
解决vue动态下拉菜单 有数据未反应的问题
2020/08/06 Javascript
解决vue安装less报错Failed to compile with 1 errors的问题
2020/10/22 Javascript
使用Python的Treq on Twisted来进行HTTP压力测试
2015/04/16 Python
python清除字符串中间空格的实例讲解
2018/05/11 Python
详解基于django实现的webssh简单例子
2018/07/17 Python
Python实现E-Mail收集插件实例教程
2019/02/06 Python
pyqt5让图片自适应QLabel大小上以及移除已显示的图片方法
2019/06/21 Python
python实现将json多行数据传入到mysql中使用
2019/12/31 Python
Python基于BeautifulSoup爬取京东商品信息
2020/06/01 Python
详解利用canvas实现环形进度条的方法
2019/06/12 HTML / CSS
如何现实servlet的单线程模式
2014/08/05 面试题
应届生求职信
2014/05/31 职场文书
2014年留守儿童工作总结
2014/12/10 职场文书
初中班干部工作总结
2015/08/10 职场文书
珍惜时间的诗歌赏析
2019/08/23 职场文书
深入理解以DEBUG方式线程的底层运行原理
2021/06/21 Java/Android
鸿蒙3.0体验感怎么样? 鸿蒙3.0系统评测向
2022/08/14 数码科技