HTTP 相关基础
爬取网页信息:
import urllib.request
resp=urllib.request.urlopen('http://www.baidu.com')
html=resp.read()
print(html)
解读:urlopen方法–urlopen(url, data, timeout)
三个参数:
第一个参数 url 即为 URL,
第二个参数 data 是访问 URL 时要传送的数据,
第三个 timeout 是设置超时时间
请求
- 请求方法:get 和 post
get———https://www.baidu.com/s?wd=python
这就是一个Get, wd是一个搜索关键字。
post————请求在表单提交时发起。
别的请求方法:
- 请求的网址:URL
- 请求头:用来说明服务器要使用的附加信息,如Cookie,Referer等
写爬虫的时候,大多数时候需要请求头 - 请求体
请求体-般承载的内容是POST请求中的表单数据,如果要构造POST请求,需要使用正确的Content-Type,并了解各种请求库的各个参数设置时使用的是哪种Content-Type,不然可能会导致POST提交后无法正常响应。
而对于GET请求,请求体则为空。
响应
三部分:响应状态码;响应头;响应体
状态码如200代表服务器正常响应,404代表页面未找到,500代表服务器内部发生错误。
响应头包含了服务器对请求的应答信息,如Content-Type、Server、Set-Cookie等。
响应体爬虫中,主要是通过响应体,得到网页的源代码,JSON数据等,然后从中做相应的内容。
网页基础
网页的组成
网页由HTML,CSS,JavaScript组成;
HTML:
网页包括文字、按钮、图片和视频等各种复杂的元素,其基础架构就是HTML。
CSS:层叠样式表
css是目前唯一的网页页面排版样式标准!
JS:
我们在网页里可能会看到一些交互和动画效果,如下载进度条、提示框、轮播图等,这通常就是JavaScript的功劳。
网页的结构
开头用DOCTYPE定义了文档类型,其次最外层是html标签,段后还有对应的结束标签来表示闭合,其内部是head标签和body标签,分别代表网页头和网页体,它们也需要结束标签。
title标签则定义了网页的标题,会显示在网页的选项卡中,不会显示在正文中。
body标签内则是在网页正文中显示的内容。
节点树与节点间的关系
选择器
最常用的三种常用方法:
1.< div id=“container”>
上例中div节点的id为container,那么就
可以表示为#container,其中#开头代表选择id,其后紧跟id的名称。
2.<div class="rapper">
如果我们想选择class为wrapper的节点,便可以使用.wrapper,这里以点(.)开头代表选择class,其后紧跟class的名称。
3.< h2 class =“title” >Hello World
标签名筛选,例如想选择二级标题,直接用h2即可。
爬虫的基本原理
概念 爬虫:获取–提取–保存
获取:Python提供了许多库来帮助我们实现,如urllib、requests等。我们可以用这些库来帮助我们实现HTTP请求操作。
提取:通用的方法便是采用**正则表达式**提取。
还有一些根据网页节点属性、css选择器或XPath来提取网页信息的库,如BeautifulSoup、pyquery、lxml等。使用这些库,我们可以高效快速地从中提取网页信息,如节点的属性、文本值等。
保存:可以简单保存为TXT文本或JSON文本,也可以保存到数据库,如MySQL和MongoDB等,也可保存至远程服务器,如借助SFTP进行操作等。
会话和Cookies
- 静态网页和动态网页
网页的内容是HTML代码编写的,文字、图片等内容均通过写好的HTML代码来指定,这种页面叫作静态网页。
动态解析URL中参数的变化,关联数据库井动态呈现不同的页面内容,非常灵活多变。我们现在遇到的大多数网站都是动态网站。 - 无状态HTTP
会话与Coolies 是针对于无状态HTTP这种情况产生的技术。 - 会话与Cookies
会话在服务端;cookies在客户端。
代理的基本原理
1. 背景:服务器会封IP,服务器检测的是某个IP单位时间的请求次数,那么借助某种方式来伪装我们的IP,让服务器识别不出是由我们本机发起的请求,便可以成功防止封IP。
2. 作用:桥梁
3. 爬虫代理:让服务器误以为是代理服务器访问,隐藏了真实的IP,这样达到很好的爬虫效果。
4. 代理的分类: 略
5. 代理的设置:使用网上的免费代理;使用付费代理服务;ADSL拨号。