今天我们要学习的内容是轻量级的爬虫,即我们所抓取的页面是静态加载的网页内容,而不是那些需要用户登录或者JavaScript异步加载的网页内容。
首先我们明确一个问题:爬虫能干什么?
爬虫:一段自动抓取互联网信息的程序
我们可以把互联网看成URL组成的网状结构,就像下图一样:
我们通过手工的方式来访问其中的部分URL,当我们有访问很多的具有某一方面的相同特征的网页需要,手工的方式效率就太低了。网络爬虫就是帮助我们来解决这个问题,爬虫可以从一个URL出发,访问所有的相关联的URL,并且可以从页面中提取我们所需要的价值数据。则上图就变成了这样:
用户浏览网站的过程:
- 用户输入网址
- 经过DNS服务器,找到服务器主机
- 向服务器提出请求,服务器经过解析之后,向用户的浏览器发送html、css、JavaScript等文件
- 用户获取想要的信息
爬虫要做的就是将这些html代码获取到,并对这些代码进行过滤,通过分析和过滤这些html代码,实现对资源的获取
url:统一资源定位,也就是我们通常说的网址。它包括三部分组成:协议、包含有该资源的主机IP地址(有时也包括端口号)以及文件,要通过爬虫获取想要的资源,就必须指定特定的url
接下来,我们完成一个简单的爬取操作——粗鲁地爬取一个网页的全部内容
我们通过一段简单的代码就可以爬取到百度主页的所有内容:
import urllib.request
response=urllib.request.urlopen("http://www.baidu.com")
print(response.read())
我们得到百度主页的源代码(简单显示一小段):
<!DOCTYPE html>\n<!--STATUS OK--><meta name="theme-color" content="#2932e1">\n <link rel="shortcut icon" href="/favicon.ico" type="image/x-icon" />
大家可以通过百度主页——查看网页源代码来进行对照。那么,这短短的几行代码又为什么能够爬取到网页的源代码呢?接下来我们就来进行一个解释:
import urllib.request导入urllib.request库,这个库主要的作用有以下几个方面:获取web页面、在远程http服务器进行验证、额外数据请求,如get和post数据、异常处理、非http协议通信(如FTP)
response=urllib.request.urlopen("http://www.baidu.com"),调用urlopen方法获取到想要访问的网页的内容。urlopen(url,data,timeout),其中url为要访问的网址,是不能省略的。data是在爬取网页内容时要传入的数据,默认为none,timeout为超时时间,默认为socket_GLOBAL_DEFAULT_TIMEOUT
print(response.read()),将获取到的资源打印出来
这里是一个简单的获取整个网页内容的方法,只需要三行代码,但我们往往需要将自己想要的信息提取出来,这就是我们接下来要学习的内容