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 相关文章推荐
通过C++学习Python
Jan 20 Python
Python读取mp3中ID3信息的方法
Mar 05 Python
深入理解Python3中的http.client模块
Mar 29 Python
Python获取当前路径实现代码
May 08 Python
python模块之sys模块和序列化模块(实例讲解)
Sep 13 Python
python通过安装itchat包实现微信自动回复收到的春节祝福
Jan 19 Python
使用celery和Django处理异步任务的流程分析
Feb 19 Python
python GUI库图形界面开发之PyQt5多线程中信号与槽的详细使用方法与实例
Mar 08 Python
Python3通过chmod修改目录或文件权限的方法示例
Jun 08 Python
浅谈Keras的Sequential与PyTorch的Sequential的区别
Jun 17 Python
详解python算法常用技巧与内置库
Oct 17 Python
Python利用socket模块开发简单的端口扫描工具的实现
Jan 27 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实现采集程序原理和简单示例代码
2007/03/18 PHP
php 常用字符串函数总结
2008/03/15 PHP
简单的PHP留言本实例代码
2010/05/09 PHP
PHP fopen()和 file_get_contents()应用与差异介绍
2014/03/19 PHP
在laravel框架中使用model层的方法
2019/10/08 PHP
javascript globalStorage类代码
2009/06/04 Javascript
jquery 最简单易用的表单验证插件
2010/02/27 Javascript
jquery实现简单的无缝滚动
2015/04/15 Javascript
基于javascript制作微信聊天面板
2020/08/09 Javascript
jQuery中iframe的操作(点击按钮新增窗口)
2016/04/20 Javascript
详解如何使用webpack在vue项目中写jsx语法
2017/11/08 Javascript
JavaScript面试技巧之数组的一些不low操作
2019/03/22 Javascript
微信小程序扫描二维码获取信息实例详解
2019/05/07 Javascript
用Vue.js在浏览器中实现裁剪图像功能
2019/06/18 Javascript
简述Vue中容易被忽视的知识点
2019/12/09 Javascript
《javascript设计模式》学习笔记五:Javascript面向对象程序设计工厂模式实例分析
2020/04/08 Javascript
JavaScript 实现拖拽效果组件功能(兼容移动端)
2020/11/11 Javascript
推荐下python/ironpython:从入门到精通
2007/10/02 Python
使用python将mdb数据库文件导入postgresql数据库示例
2014/02/17 Python
Python中用Spark模块的使用教程
2015/04/13 Python
Python 由字符串函数名得到对应的函数(实例讲解)
2017/08/10 Python
Python判断有效的数独算法示例
2019/02/23 Python
python的re模块使用方法详解
2019/07/26 Python
Python中pymysql 模块的使用详解
2019/08/12 Python
Python StringIO及BytesIO包使用方法解析
2020/06/15 Python
python 19个值得学习的编程技巧
2020/08/15 Python
Skyscanner澳大利亚:全球领先的旅游搜索网站
2018/03/24 全球购物
PHP面试题附答案
2015/11/28 面试题
介绍下java.util.Arrays类
2012/10/16 面试题
总经理助理岗位职责
2013/11/08 职场文书
先进党支部事迹材料
2014/01/13 职场文书
工作决心书
2014/03/11 职场文书
推荐信格式要求
2014/05/09 职场文书
2016学习全国教书育人楷模先进事迹心得体会
2016/01/21 职场文书
深入浅析Redis 集群伸缩原理
2021/05/15 Redis
Python pandas之求和运算和非空值个数统计
2021/08/07 Python