1.预备知识:
1.1HTTP原理:
1.1.1URL
URL又称为网络资源定位符,顾明思以这是一个标识符,用于定位网络的资源,而对于客户端的用户而言网络资源即网页界面呈现出来的东西,而要找到这样的资源就需要一个标识符,比如我们想通过浏览器进入淘宝PC端界面,我们就可以输入淘宝的网址,浏览器通过网址会生成一个URL,从而找到淘宝网的界面显示在浏览器窗口。URL包含了网址也就是域名信息,同时还包含一些其他符号,比如百度的网址是www.baidu.com,但打开百度首页浏览器搜索栏显示的是'https://www.baidu.com',里面包含了域名信息也就是网址,但是还有https://这表示了访问资源需要的协议类型为https超文本传输协议,初次之外还有ftp,sftp等。如果你想用百度搜索美女这一关键字的网页,你会发现搜索栏变得非常复杂,包含了很多奇怪的字母,而这一整串就是这一网络资源的URL。
1.1.2HTML和HTTP
HTML全程超文本标记语言,这是网页的源代码语言格式,大多数的网页的源代码都有HTML写的,然后通过解析成为网页,包含图片,文字,视频等信息。在谷歌浏览器打开任意界面,按下F12键,elements栏就可以看到当前网页的源代码,这些源代码都是超文本。http的全称是Hyper Text Transfer Protocol,超文本传输协议,HTTP协议用于从服务器传输超文本数据到本地浏览器的传送协议,https表示经过SSL安全加密的传输协议。我们在浏览器中输入一个 URL,回车之后便会在浏览器中观察到页面内容,实际上这个过程是浏览器向网站所在的服务器发送了一个 Request,即请求,网站服务器接收到这个 Request 之后进行处理和解析,然后返回对应的一个 Response,即响应,然后传回给浏览器,Response里面就包含了页面的源代码等内容,浏览器再对其进行解析便将网页呈现了出来。
1.1.3Request
Request由本地向服务端发出获取网络资源。Request可以分为四部分内容:Request Method,Request URL、Request Headers、Request Body,即请求方式、请求链接、请求头、请求体。
Request Method常见的有两种:GET和POST
我们在浏览器中直接输入一个 URL 并回车,这便发起了一个 GET 请求,请求的参数会直接包含到 URL 里,例如百度搜索 Python,这就是一个 GET 请求。GET和POST的区别在于,GET请求所需的信息都包含在URL内,而POST需要而外信息,比如说要登录某一网站是需要提交账号密码,如果使用GET则会把敏感信息包含在URL内,而POST则通过额外参数的形式传递信息。
Request URL:你懂的
Request Headers:用于添加请求是的附加信息,比较重要的有:Cookie, Referer, User-Agent
Cookies 的主要功能就是维持当前访问会话,例如我们输入用户名密码登录了某个网站,登录成功之后服务器会用 Session 保存我们的登录状态信息,后面我们每次刷新或请求该站点的其他页面时会发现都是保持着登录状态的,在这里就是 Cookies 的功劳,Cookies 里有信息标识了我们所对应的服务器的 Session 会话,每次浏览器在请求该站点的页面时都会在请求头中加上 Cookies 并将其发送给服务器,服务器通过 Cookies 识别出是我们自己,并且查出当前状态是登录的状态,所以返回的结果就是登录之后才能看到的网页内容.
Referer,此内容用来标识这个请求是从哪个页面发过来的,服务器可以拿到这一信息并做相应的处理,如做来源统计、做防盗链处理等。
User-Agent,简称 UA,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、浏览器及版本等信息。在做爬虫时加上此信息可以伪装为浏览器,如果不加很可能会被识别出为爬虫
Request Body:
请求体,一般承载的内容是 POST 请求中的 Form Data,即表单数据,而对于 GET 请求 Request Body 则为空。
1.2爬虫基本原理
爬虫,即网络爬虫,我们可以把互联网就比作一张大网,而爬虫便是在网上爬行的蜘蛛,我们可以把网的节点比做一个个网页,爬虫爬到这就相当于访问了该页面获取了其信息,节点间的连线可以比做网页与网页之间的链接关系,这样蜘蛛通过一个节点后可以顺着节点连线继续爬行到达下一个节点,即通过一个网页继续获取后续的网页,这样整个网的节点便可以被蜘蛛全部爬行到,这样网站的数据就可以被抓取下来了。
爬虫主体上可以分为三部分:1.获取网页 2.提取信息 3.保存信息
1.2.1
爬虫首先要做的工作就是获取网页,在这里获取网页即获取网页的源代码,源代码里面必然包含了网页的部分有用的信息,所以只要把源代码获取下来了,就可以从中提取我们想要的信息了。具体操作上可以使用python中的一些库如Urllib、Requests帮助我们实现HTTP操作,得到Reponse后再解析Body中的信息
1.2.2
我们在第一步获取了网页源代码之后,接下来的工作就是分析网页源代码,从中提取我们想要的数据,首先最通用的方法便是采用正则表达式提取,这是一个万能的方法,但是在构造正则表达式的时候比较复杂且容易出错。
另外由于网页的结构是有一定规则的,所以还有一些根据网页节点属性、CSS 选择器或 XPath 来提取网页信息的库,如 BeautifulSoup、PyQuery、LXML 等,使用这些库可以高效快速地从中提取网页信息,如节点的属性、文本值等内容。
1.2.3
提取信息之后我们一般会将提取到的数据保存到某处以便后续数据处理使用。保存形式有多种多样,如可以简单保存为 TXT 文本或 Json 文本,也可以保存到数据库,如 MySQL、MongoDB 等,也可保存至远程服务器,如借助 Sftp 进行操作等。