知识储备,简单爬虫的必知必会,【核心】

一、实验说明

1. 环境登录

无需密码自动登录,系统用户名shiyanlou

2. 环境介绍

本实验环境采用带桌面的Ubuntu Linux环境,实验中会用到桌面上的程序:

  1. xfce终端:Linux命令行终端,打开后会进入 shell 环境,可以使用Linux命令
  2. Firefox:浏览器,可以用在需要前端界面的课程里,只需要打开环境里写的HTML/JS页面即可
  3. GVim:非常好用的编辑器,最简单的用法可以参考课程Vim编辑器

3. 环境使用

使用GVim编辑器输入实验所需的代码及文件,使用 xfce终端运行所需命令进行操作。

实验报告可以在个人主页中查看,其中含有每次实验的截图及笔记,以及每次实验的有效学习时间(指的是在实验桌面内操作的时间,如果没有操作,系统会记录为发呆时间)。这些都是您学习的真实性证明。

实验楼虚拟机,自带了python2.X和python3.X版本,本课程基于 python2

二、课程介绍

  • 一门编程语言的学习,实践中学习的效果肯定是最好的,我当初学python就是冲着爬虫来的,所以这次的课程目的是学会“炮制”简单的爬虫

  • 本次课程,主要是介绍根据给定的url,下载网页中指定的模特图片,python版本为2.7(3.0也可以运行,print需要修改下),使用的模块有os、urllib2、re,单线程爬虫

  • 这节课程基本没有代码全是原理,但是原理很重要,我会细讲,所以本节课程的文字内容,请细看。后面的课程是建立在这节课程之上来完成的,而且课程之间是上下级调用关系,层次结构很明显。

  • 介绍下图片来源--妹子图,这个网站的整个爬取是最终目的,这节主要是对单个页面内的图片,进行爬取,例如这个 谁是这长发女孩心中的白马王子,供上第一张图片

三、课题探索

  • 第一步:

  1. 套图页面:这里呢,主要是搜索页面中的模特图片路径,但是图片都是img标签,不设计个简单匹配套路,还真难得到100%的精确度,先提供一个网页,大家试着找找,软妹

  2. 标签所有单页:获取该网页中的所有套图页的链接(进入套图页),也就是给定一个标签页,获得这个页面中显示的所有套图页的链接,如某一标签页example[15](实际情况比这还多),则这个页面中包含了15个套图

  3. 标签所有页面:一个标签不止一个页面,获取该标签的所有页,如tag1[35][10](实际情况比这还多),标签tag1又35个页面,每个页面又包含了10个套图页面,就像一个二维数组。

  4. 顶级域名页面:这里,包含了所有的标签以及它们的链接,不过呢,有重复,这里很简单的做一个去重就可以了,如meizi[8](实际情况比这还多),说明这个网站包含8个标签,每个标签里面又有它自己所包含的链接。 图的信息量还是蛮大的,如图--

  5. 最后提下图片保存路径问题,这个呢在中层和高层中需要,底层还是不需要的,底层测试时,传入文件夹路径并保存该文件夹下,但在中层中,路径问题还是挺严重的,因为我们最终是启动高层,传入一个最初的文件夹路径,然后高层创建中层文件夹,并且在调用中层函数时,将标签链接和对应的文件夹路径传过去,中层调用底层也是一样的,都需要传过去文件夹路径。不过文件夹路径传过去,最后是由底层来创建,高层和中层是不创建的,路径是虚的,由底层创建并保存图片文件:

  • meizi是由我们调用顶层时,传进去文件夹,这个文件夹是真实存在的
  • baobei nvshen mengmeizi 是顶层拟定的,在调用中层时,和相应的标签链接一起传给中层
  • 12 3324 346 89 这几个文件夹是由中层拟定,在调用底层时,和组图套图链接地址一起传给底层,底层从链接地址的html中得到了图片地址,从中层得到文件夹路径来创建文件夹,下载图片并保存到该文件夹中 全部过程就是这样,并且os模板里面,有一次性创建多层(>=1)文件夹的函数,这一点是能实现的,我这么实现,是防止空文件夹的存在,当有图片时,才一起创建。如果想了解函数,你可以进入python命令行,用help()函数查看函数介绍--

    图示,文件夹是手工建的,利用tree命令行打印并截图

  • 第二步:

    源码路径,这个都是靠人脑分析,找好后,顺序暂定,介绍下re模块和一个简单的匹配法则

    .*?:匹配任意字符,非贪婪模式,如re123re0re456re,则(re.*?re)匹配re123re和re456re
    .*:匹配任意字符,贪婪模式,如re123re0re456re,则(re.*re)匹配re123re0re456re
    ():返回括号内的匹配到的字符,如(re.*re)
    这里呢,只需要熟悉和使用这个规则就可以了,其余的不做介绍

    正则表达式可以在实验楼正则表达式课程深入学习

  • 第三步:

    图片下载保存,这里涉及os的一些函数

    os.path.exists(文件路径),检测该文件路径是否存在
    os.mknod(文件),创建该文件,上一级目录必须存在
    os.mkdirs(文件),创建文件,上一级目录如果不存在则一同创建
    进入python操作界面,help(os),会显示所有函数名及介绍,这里只做了简单介绍

    有这些就够了,os模块,基本也就是在图片下载时需要

  • 第四步:

    网络问题很重要,爬虫速度是爬虫里面核心,那网络就是核心的核心

  1. 这个问题的错误在这里是不应该这么早出现的,但是警告会一开始就出现,如果等它报错停止运行的问题出现的时候再解除,这实在并不是一个好决策
  2. 这个问题的优化,可以直接将爬虫进化,或者说是‘腿的个数’翻了个倍。简单描述下这个问题:在前期,一个图片的大小也就200k~500k的样子,也就2秒左右速度很快,但是网络延迟能达到10秒甚至更高,所以你的带宽利用率也就是10%不到,这是前期警告。
  3. 在网络不稳定或网络拥堵的情况下,一旦urllib2这个模块链接超时未响应,程序会等待然后就是错误并终端程序的运行,这就是异常报错,所以在这个项目的第一节课,就应该解决这个大隐患的小Bug.
  • 第五步:既然网络问题提出来了,那就补上相应的解决方法:

    python基础中,有异常检测try...except,使用urllib2.open(),补抓urllib2.URLError异常,单独置于一个函数中,当不成功时返回空字符串,通知调用函数继续调用该函数

    def loadurl(url):
    try:
    conn = urllib2.urlopen(url, timeout=5)
    html = conn.read()
    return html
    except urllib2.URLError:
    errorReport.errorLoadUrl(url)
    return ''
    except Exception:
    print("unkown exception in conn.read()")
    return ''

    同样的,保存图片到本地,也需要进行超时检测,以防报错

  • 第六步:补充说明,在这个后期,我也添上了“改进爬虫优化网路速率提高爬虫速度的多线程模式”,会以一节课程的形式单独补充,不作为本课的核心课程,作为拓展课程。

四、本项目层次结构介绍

五、组图下载

这节需要介绍的基础知识,大概就是这些,下节的主要内容是图片下载和url链接问题

python网络爬虫,知识储备,简单爬虫的必知必会,【核心】的更多相关文章

  1. 脑残式网络编程入门(三):HTTP协议必知必会的一些知识

    本文原作者:“竹千代”,原文由“玉刚说”写作平台提供写作赞助,原文版权归“玉刚说”微信公众号所有,即时通讯网收录时有改动. 1.前言 无论是即时通讯应用还是传统的信息系统,Http协议都是我们最常打交 ...

  2. 迈向高阶:优秀Android程序员必知必会的网络基础

    1.前言 网络通信一直是Android项目里比较重要的一个模块,Android开源项目上出现过很多优秀的网络框架,从一开始只是一些对HttpClient和HttpUrlConnection简易封装使用 ...

  3. Elasticsearch必知必会的干货知识一:ES索引文档的CRUD

    ​ 若在传统DBMS 关系型数据库中查询海量数据,特别是模糊查询,一般我们都是使用like %查询的值%,但这样会导致无法应用索引,从而形成全表扫描效率低下,即使是在有索引的字段精确值查找,面对海量数 ...

  4. Elasticsearch必知必会的干货知识二:ES索引操作技巧

    该系列上一篇文章<Elasticsearch必知必会的干货知识一:ES索引文档的CRUD> 讲了如何进行index的增删改查,本篇则侧重讲解说明如何对index进行创建.更改.迁移.查询配 ...

  5. Python 爬虫(1)基础知识和简单爬虫

    Python上手很容易,免费开源,跨平台不受限制,面向对象,框架和库很丰富. Python :Monty Python's Flying Circus (Python的名字来源,和蟒蛇其实无关). 通 ...

  6. python小实例一:简单爬虫

    本文所谓的爬虫就是通过本地远程访问url,然后将url的读成源代码形式,然后对源代码进行解析,获取自己需要的数据,相当于简单数据挖掘.本文实现的是将一个网页的图片爬出保存到本地的过程,例子很简单,用的 ...

  7. 【python网络编程】新浪爬虫:关键词搜索爬取微博数据

    上学期参加了一个大数据比赛,需要抓取大量数据,于是我从新浪微博下手,本来准备使用新浪的API的,无奈新浪并没有开放关键字搜索的API,所以只能用爬虫来获取了.幸运的是,新浪提供了一个高级搜索功能,为我 ...

  8. python网络编程知识体系

    python的网络编程包括: 1.mvc-socket-线程-进程-并发-IO异步-消费者生产者 2.mysql-paramiko-审计堡垒机-redis-分布式监控 线程.进程 和 协程 原理剖析 ...

  9. python 爬虫必知必会

    #python爬虫 #新闻数据 #机器学习:股票数据获取及分析 #网络搜索引擎的一个部件 #Http协议 #正则表达式 #多线程,分布式 #http报文展示 #Http 应答报文介绍 #1.应答码 # ...

随机推荐

  1. 简要分析javascript的选项卡和轮播图

    选项卡 思路 1.按钮和展示的页面要对应:分别遍历,记住当前按钮的索引,让其成为展示页面的索引 2.只出现所对应的页面:所有的页面隐藏,只展示想要的页面 只展示js代码 for(var i=0;i&l ...

  2. 【BZOJ4872】分手是祝愿(动态规划,数学期望)

    [BZOJ4872]分手是祝愿(动态规划,数学期望) 题面 BZOJ 题解 对于一个状态,如何求解当前的最短步数? 从大到小枚举,每次把最大的没有关掉的灯关掉 暴力枚举因数关就好 假设我们知道了当前至 ...

  3. [BZOJ1050] [HAOI2006] 旅行comf (Kruskal, LCT)

    Description 给你一个无向图,N(N<=500)个顶点, M(M<=5000)条边,每条边有一个权值Vi(Vi<30000).给你两个顶点S和T,求一条路径,使得路径上最大 ...

  4. Idea工具开发 SpringBoot整合JSP(毕设亲测可用)

    因为,临近毕业了,自己虽然也学了很多框架.但是,都是在别人搭建好的基础上进行项目开发.但是springboot的官方文档上明确指出不提倡使用jsp进行前端开发,但是在校期间只学了jsp作为前端页面.所 ...

  5. console.log 简写

    console.log 简写 平常代码调试总会用到console.log,但是每次写这么长也是很麻烦,就想着存一个简介一点的变量: 然后就随手写了下面代码: var a = 10; var log = ...

  6. js备战春招の四の严格模式

    JavaScript 严格模式(strict mode)即在严格的条件下运行. use strict 严格模式下你不能使用未申明的变量 "use strict" 指令只运行出现在脚 ...

  7. 错误代码和UNICODE编程

    程序错误处理 一般错误返回的数据类型有VOID BOOL HANDLE PVOID LONG/DWORD 返回值哪些代表成功和错误需查文档 错误码和解释存放在WinError.h中 使用GetLast ...

  8. 微信小程序基于腾讯云对象存储的图片上传

    在使用腾讯云对象存储之前,公司一直使用的是传统的FTP的上传模式,而随着用户量的不断增加,FTP所暴露出来的问题也越来越多,1.传输效率低,上传速度慢.2.时常有上传其他文件来攻击服务器,安全上得不到 ...

  9. 使用git指令下载github仓库代码(笔记)

    通过Git指令下载源码 Git概念说明 ​ 三种状态:修改状态.暂存状态和Git仓库 ​ 基本的Git工作流程: ​ 在工作目录中修改文件 ​ 暂存文件,将文件的快照放入暂存区域 ​ 提交更新,找到暂 ...

  10. ------- Tor 源码分析第三部分—— 日志设施与智能链表 --------

    ------------------------------------------------------------------------------------ init_logging()( ...