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获取mp3文件信息的方法
Jun 15 Python
Python正则表达式经典入门教程
May 22 Python
用Python分析3天破10亿的《我不是药神》到底神在哪?
Jul 12 Python
Python基于plotly模块实现的画图操作示例
Jan 23 Python
python基于gevent实现并发下载器代码实例
Nov 01 Python
python实现回旋矩阵方式(旋转矩阵)
Dec 04 Python
Python爬虫库BeautifulSoup的介绍与简单使用实例
Jan 25 Python
使用python自动追踪你的快递(物流推送邮箱)
Mar 17 Python
Python常用编译器原理及特点解析
Mar 23 Python
python UIAutomator2使用超详细教程
Feb 19 Python
如何用python反转图片,视频
Apr 24 Python
简单介绍Python的第三方库yaml
Jun 18 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中的CMS的涵义
2007/03/11 PHP
php5中类的学习
2008/03/28 PHP
坏狼的PHP学习教程之第2天
2008/06/15 PHP
php日志函数error_log用法实例分析
2019/09/23 PHP
弹出广告特效(一个IP只弹出一次)的代码
2007/07/27 Javascript
javascript 模拟JQuery的Ready方法实现并出现的问题
2009/12/06 Javascript
JS在TextArea光标位置插入文字并实现移动光标到文字末尾
2013/06/21 Javascript
jquery 跳到顶部和底部动画2句代码简单实现
2013/07/18 Javascript
JS实现根据出生年月计算年龄
2014/01/10 Javascript
使用Node.js实现一个简单的FastCGI服务器实例
2014/06/09 Javascript
用JS实现轮播图效果(二)
2016/06/26 Javascript
jQuery实现点击查看大图并以弹框的形式居中
2016/08/08 Javascript
jQuery插件DataTable使用方法详解(.Net平台)
2016/12/22 Javascript
详解在Angularjs中ui-sref和$state.go如何传递参数
2017/04/24 Javascript
详解webpack中的hash、chunkhash、contenthash区别
2018/01/05 Javascript
基于Vue2实现简易的省市区县三级联动组件效果
2018/11/05 Javascript
Vue 中如何正确引入第三方模块的方法步骤
2019/05/05 Javascript
js 动态校验开始结束时间的实现代码
2020/05/25 Javascript
js实现限定范围拖拽的示例
2020/10/26 Javascript
简单的编程0基础下Python入门指引
2015/04/01 Python
python开发之基于thread线程搜索本地文件的方法
2015/11/11 Python
python基础知识小结之集合
2015/11/25 Python
浅析Python中元祖、列表和字典的区别
2016/08/17 Python
python编写弹球游戏的实现代码
2018/03/12 Python
pandas apply 函数 实现多进程的示例讲解
2018/04/20 Python
Python判断一个list中是否包含另一个list全部元素的方法分析
2018/12/24 Python
pyqt远程批量执行Linux命令程序的方法
2019/02/14 Python
AmazeUI 加载进度条的实现示例
2020/08/20 HTML / CSS
美国瑜伽品牌:Gaiam
2017/10/31 全球购物
意大利简约的休闲品牌:Aspesi
2018/02/08 全球购物
小车司机岗位职责
2013/11/25 职场文书
安踏广告词改编版
2014/03/21 职场文书
趣味运动会标语口号
2015/12/26 职场文书
gateway与spring-boot-starter-web冲突问题的解决
2021/07/16 Java/Android
基于PostgreSQL/openGauss 的分布式数据库解决方案
2021/12/06 PostgreSQL
正则表达式拆分url实例代码
2022/02/24 Java/Android