专栏首页有三AI【AI白身境】学深度学习你不得不知的爬虫基础

【AI白身境】学深度学习你不得不知的爬虫基础

01前端网页基础

在介绍爬虫之前我们先说下网页基础,理解前端网页的一些基础知识对于学习爬虫是很有必要的,它是爬虫的基础之一。

1.1 网页构成

通常情况下我们看到的网页由三部分组成,分别是HTML、CSS和JavaScript,接下来我分别介绍它们。

1.1.1 HTML

HTML,全称Hyper Text Markup Language,也就是“超文本链接标示语言”。但它不是一种编程语言,而是一种标记语言。我们通常看到的网页就是HTML使用标记标签来描述的。在HTML中,通常不同类型的文字通过不同类型的标签来表示。如图片用img标签表示,视频用video标签表示,段落用p标签表示。

现在我们看下网易云音乐的源代码,如下图所示:

获取这个网页的源代码很简单,打开网页后,按下F12键就会出现这个源代码了。通过观察这个HTML我们会发现整个网页就是由各种标签嵌套组合而成的,从而形成了整个网页的架构。

1.1.2 CSS

从上面的介绍我们知道HTML定义了网页的架构,可以认为是一个框架,但若只有HTML,那么这样的网页就太简陋了,为了让我们的网页更加好看点,我们就需要用CSS。

CSS,全称Cascading Style Sheets,即层叠样式表。“层叠”是指当在HTML中引用了数个样式文件,并且样式发生冲突时,浏览器能依据层叠顺序处理。“样式”指网页中文字大小、颜色、元素间距、排列等格式。我们来看看网易云音乐的CSS,如下所示。

1.1.3 JavaScript

上面介绍的HTML和CSS只能展现一种静态信息,缺乏交互性。但我们在网页里通常会看到一些交互和动画效果,如提示框、轮播图等,这些动态信息通常就是通过JavaScript完成的。它的出现使得用户与信息之间不只是一种浏览与显示的关系,而是实现了一种实时、动态、交互的页面功能。

这就是网页构成的一些基本知识,你掌握了吗?

1.2 URL

爬虫最主要的处理对象是什么?那毫无疑问肯定是URL,爬虫的实质就是根据URL地址取得所需要的文件内容,然后对它进行进一步的处理。所以说准确理解URL也是理解网络爬虫的基础之一。

URL,全称是Uniform Resource Locator,通俗地说,URL是Internet上描述信息资源的字符串,主要用在各种WWW客户程序和服务器程序上。URL也有它特定的格式,其格式由三部分组成,如下:

1.第一部分是协议(或称为服务方式)。

2.第二部分是存有该资源的主机IP地址(有时也包括端口号)。

3.第三部分是主机资源的具体地址,如目录和文件名等。

通常第一部分和第二部分用“://”符号隔开,第二部分和第三部分用“/”符号隔开。另外第一部分和第二部分是不可缺少的,第三部分有时可以省略。

我们通过一个URL的一个小例子来解释下上面的三部分,下面是NBA中国官方网站湖人队网页的URL:

http://china.nba.com/lakers/

http这个是协议,也就是HTTP超文本传输协议,它是URL的第一部分;china.nba.com这个是网站名,由服务器名和域名构成,它是URL的第二部分;lakers就是存放网页的根目录,是URL的第三部分。

这就是URL的一些基础知识,希望大家深刻理解。

通过上面的介绍,相信你对网页的基础知识也有了大致的了解,下面我们开始学习爬虫相关库的一些基础知识。

02python爬虫库

了解了网页的一些基础知识后,我们继续来学习下python爬虫的一些库,通过前面第三篇文章《AI白身境学习AI必备的python基础》我们都知道python有许多库,如NumPy,matplotlib等,针对爬虫它有个自带的库urllib。

2.1 urllib介绍

urllib是python自带的一个主要用来爬虫的标准库,无需安装可以直接用,它能完成如下任务:网页请求、响应获取、代理和cookie设置、异常处理和URL解析,可以说要想学会爬虫,必须要学会它。

2.2 urllib基础用法

我们已经知道urllib能完成网页请求、响应获取等许多任务,现在我来介绍下它的基本用法。

2.2.1 发起GET/POST请求

在用urllib实现GET和POST之前,我们先解释下什么是GET?什么是POST?它们的区别又是啥?

GET和POST实际上就是HTTP请求的两种基本方法,通常GET是从指定的资源请求数据,而POST是向指定的资源提交要被处理的数据。我们再看看它的区别是啥,请看下面表格:

哈哈,你现在看到这些肯定很闷逼。

我们从头(HTTP)来分析下,我们已经知道HTTP是基于TCP/IP的关于数据如何在万维网中如何通信的协议。HTTP的底层是TCP/IP,所以GET和POST的底层也是TCP/IP,也就是说,GET/POST都是TCP连接,GET和POST能做的事情是一样的。

那它们的区别体现在哪呢?对于GET方式的请求,浏览器会把http header和data一并发送出去;而对于POST,浏览器先发送header,服务器响应后,浏览器再发送data。

也就是说,在大万维网世界中,TCP就像汽车,我们用TCP来运输数据,HTTP给汽车运输设定了好几个运输方式,有GET, POST等。GET只需要汽车跑一趟就把货送到了,而POST得跑两趟,第一趟,先去和服务器打个招呼“嗨,我等下要送一批货来,你们打开门迎接我”,然后再回头把货送过去。

你现在明白它们的区别了吗?我们再看看urllib是如何使用这两个方法的。

在urllib中有个request这个模块,它主要是来负责构造和发起网络请求。它有个urlopen()访问方法,默认的访问方法是GET,我们在urlopen()方法中传入字符串格式的url地址后,此方法会访问目标网址,然后返回访问的结果。请看下面的实例:

from urllib import request

url = "https://zhuanlan.zhihu.com/p/20751612"

html = request.urlopen(url).read().decode("utf-8")

print(html)

urlopen()方法请求返回的对象类型为HTTPResponse对象。

from urllib import request

url = "https://zhuanlan.zhihu.com/p/20751612"

html = request.urlopen(url)

print(type(html))

返回的状态为200,即返回数据。

print(html.status)

返回的数据会是bytes的二进制格式,所以需要decode()一下,转换成字符串格式。

print(html.read().decode("utf-8")

这就是GET方式的一个最基本的运用,对于POST方法的实现其实和GET差不多,只不过多了一个data参数。即若添加data参数,就是以POST请求方式进行,如果没有data参数就是GET请求方式,请看下面一个POST案例。

这里通过使用http://httpbin.org/post网站演示(该网站可以作为练习如何使用urllib的一个站点使用,能够模拟各种请求操作)完成了一次POST请求。

通过上面的介绍我相信你对urllib的基础知识有了一个比较深刻的了解,但这远远不够,需要我们在实践中不断丰富我们的知识库,另外,urllib只是爬虫一个最基础的库,务必掌握,其他一些高端的库根据需要可以自行学会。

到目前为止我们还没有进行爬一些张图片或者视频的实验。下面我们看看如何来爬一些图片。

03爬虫小实验

在本节我将介绍如何对知乎上某个专栏的一些图片进行爬虫。

话不多说,直接上这个小实验的代码(写在pachong.py文件中)如下:

from urllib import request

from bs4 import BeautifulSoup

import re

import time

url = "https://zhuanlan.zhihu.com/p/20751612"

html = request.urlopen(url).read().decode("utf-8")

soup = BeautifulSoup(html,"html.parser")

links = soup.find_all("img","origin_image zh-lightbox-thumb",src = re.compile(r'.jpg$'))

path = r"/home/tangxingwang/paichong_picture"

for link in links:

print(link.attrs['src'])

request.urlretrieve(link.attrs["src"],path+'\%s.jpg' % time.time())

在本实例中,我们用Beautiful Soup结合正则表达式的方式来提取符合要求的链接,链接要求是在img标签中,class=origin_image zh-lightbox-thumb,而且链接是.jpg结尾。

soup = BeautifulSoup(html,"html.parser")

links = soup.find_all("img","origin_image zh-lightbox-thumb",src = re.compile(r'.jpg$'))

提取出所有链接后,使用request.urlretrieve来将所有链接保存到本地

在终端执行上面程序代码即可爬取图片

python3 pachong.py

04github爬虫工程

接下来我们看看github上一些优秀的爬虫工程。

4.1 github图片爬虫工程

在github上有许多优秀的图片爬虫项目,我们选择一个对百度图片爬虫的工程详细解释下。下面是这个工程项目的github链接:

https://github.com/kong36088/BaiduImageSpider

我们将其clone下来后,有下图所示的一些文件:

接下来我们打开index.py这个文件,按照自己的需求修改自己的下面这一行代码

我把索引改成了科比,总数为1页,然后运行下面代码

python3 index.py

执行python3 index.py后你会发现有大量的图片在下载,如下图所示:

我们再看下文件的变化,你会现在的文件比我们之前clone下来的多了个科比文件夹,如下图所示:

打开科比这个文件夹,你会发现有许多科比的照片。

关于对百度图片爬虫就讲解到这,github上还有大量这样的项目,如下:

1.该github工程是关于对知乎里面某个问题下所有的图片进行爬虫。下面是链接:

https://github.com/ladingwu/python_zhihu

2.该github工程是关于对微博某个用户相册里面所有的图片进行爬虫。下面是链接:

https://github.com/lincanbin/Sina-Weibo-Album-Downloader

3.该github工程是关于对花瓣里面旅游模块图片进行爬虫,下面是链接

https://github.com/darrenfantasy/image_crawler/tree/master/Huaban

4.该github工程是关于对google image进行爬虫。下面是链接:

https://github.com/Ehco1996/Python-crawler/tree/master/Google-Image

这就是github上一些关于图片爬虫的工程,当然github上关于图片爬虫的工程还有很多,有需要可以自己search再学习学习。

4.2 github视频爬虫工程

说完图片的一些工程,我们再看看github上一些比较好的视频工程。下面这个链接是关于对抖音视频进行爬虫的一个项目。链接如下:

https://github.com/loadchange/amemv-crawler

clone下来有如下文件

现在打开文件`share-url.txt`,把你想要下载的抖音号分享链接编辑进去,以逗号/空格/tab/表格鍵/回车符分隔都行,可以多行。

样式如下:

然后在终端执行 下面代码即可下载

python3 amemv-video-ripper.py

下载后的视频保存在download文件件里面,里面有各个抖音号的小视频

在github中关于视频爬虫的工程实际上还有很多,大家可以去上面看看!

最后附上一个github上关于学习爬虫比较好的干货。链接如下。

https://github.com/Ehco1996/Python-crawler

总结

AI领域必须掌握的数据爬虫基础就讲到这里,这方面的知识还有很多,大家平时还需要多注意学习!

本文分享自微信公众号 - 有三AI(yanyousan_ai),作者:汤兴旺

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-01-18

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【杂谈】深度学习必备,各路免费爬虫一举拿下

    地址:https://github.com/facert/awesome-spider

    用户1508658
  • 【杂谈】爬虫基础与快速入门指南

    今天给大家分享一下网络爬虫的基础知识,以及一些优秀的开源爬虫项目。网络爬虫主要是我们在面对新的任务,但自己又没有数据的时候,获取自己想要的数据的一种手段。因此我...

    用户1508658
  • 【AI白身境】Linux干活三板斧,shell、vim和git

    通过第一篇的介绍,我们已经知道在Linux下面操作会比windows下效率高很多,下面和大家讲解一下Linux的基础操作,默认大家已经装好了Linux系统。

    用户1508658
  • gitbook 入门教程之发布电子书 原

    默认情况下,gitbook 输出方式是静态网站,其实 gitbook 的输出方式有三种: website, json,和 ebook.

    雪之梦技术驿站
  • SuSE Linux上搭建apache+php+mysql环境

    1) ./configure --prefix=/usr/local/httpd-2.2.9

    一见
  • 手把手教你,嘴对嘴传达------源码编译LNMP部署及应用 , 手动搭建discuz论坛

    LNMP是指一组通常一起使用来运行动态网站或者服务器的自由软件名称首字母缩写。L指Linux,N指Nginx,M一般指MySQL,也可以指MariaDB,P一般...

    不吃小白菜
  • 同一个github账户绑定两个域名

    一个github账号可以建立很多仓库,但是只能有一个个人主页仓库,其余都是项目仓库。主页仓库就是你的名字.github.io这个,其余的就是https://gi...

    Y大宽
  • 【珍藏版】24张价值千万的极致产品设计策略PPT

    用户1756920
  • 我们该如何开始一份PPT的制作

    用户1756920
  • SSD Win8 系统盘 4K 无损对齐历险记

    1、背景:为什么要 4K 对齐 簇是系统在硬盘上读写文件时的单位,是一个数据块(逻辑概念)。而扇区是硬盘划分的最小单位值,就是簇(数据块)占用的地方(物理概念)...

    用户1177713

扫码关注云+社区

领取腾讯云代金券