输入网址进行访问的时候,要做的第一件事就是输入网页链接(url):
* url:uniform resource locator:统一资源定位器(协议://域名:端口/路由?参数)
而数据传输使用的协议,一般就是http协议:
* http:hyper text transfer protocol:超文本传输协议
url基本格式:scheme://host[:port#]/path/…/[?query-string][#anchor]
- scheme:协议(例如:http, https, ftp)
- host:服务器的IP地址或者域名
- port#:服务器的端口(如果是走协议默认端口,缺省端口80)
- path:访问资源的路径
- query-string:参数,发送给http服务器的数据
- anchor:锚(跳转到网页的指定锚点位置)
http中最常见的两类请求:
* get:请求参数可直接写在url中
例如:http://kaoshi.edu.sina.com.cn/?p=college&s=api2015&a=getAllCollege就是一个get请求,前半部分(问号前)链接说明了我们要访问的服务是新浪提供的考试信息,后半部分的参数指明了我们需要进行的操作是获取大学的信息数据。这里的p,s,a都是该网站定义好的参数,通过给这些参数赋值,即可得到对应的数据。
* post:参数提供在数据包的主体中,在url中不可见
一个请求数据包由头部(header)和主体(body)两部分组成,所请求的url即记录在头部中;参数不是直接写在url中,而是提供在数据包的body中,非显式可见,故更安全。
url的两种返回类型:
* html:hyper text markup language标记语言,经浏览器渲染后呈现,是返回给用户看的,是文本形式的html代码。为了对其进行解析(文本->结构化html对象),需要借助一些工具如BeautifulSoup。
* api:application programming interface应用编程接口,是给开发者看的,是文本形式的json字符串(JavaScript object notation)。用python中的json包可直接将json字符串加载为python中的字典。
打开网页的开发者工具(右键-审查元素),在Network标签页中可以查看当前网页正在请求的资源(右键刷新网页)。Network标签页中请求的资源文件主要包括以下几类:
* All:不加筛选条件,即请求的全部资源文件
* XHR:xmlHttpRequest,可以同步或异步地返回 Web 服务器的响应。xmlHttpRequest在后台与服务器交换数据,这意味着可以在不加载整个网页的情况下,对网页某部分的内容进行更新
* JS:JavaScript代码
* CSS:Cascade Style Sheets:样式文件
* Img:jpg,png等图片文件
* Media:媒体资源文件
* Font:字体文件
* Doc:静态HTML文档(hyper text markup language)
在用爬虫抓取数据的时候,主要关注XHR,JS和Doc等资源。
爬虫常用工具:
python 2中可用来做爬虫的库有很多,比较常用的是urllib、urllib2和requests,这三个库基本可以解决大部分抓取需求(实际上只用前两个基本就够了)。在python3中,前两者合并到了一起成了urllib.request。三者间的关系为:
* urllib和urllib2是python标准库,是python自带的可直接使用
* urllib2是完善拓展了urllib的一些功能,比如可构造请求对象进行User-Agent伪装;但它又缺乏一些urllib的基本功能,因而这两者必须同时使用
* 在python 3之后,urllib2这个模块已经被合并到urllib中,整个urllib模块被分为urllib.request,urllib.parse,urllib.error. urllib.request打开和浏览url中的内容;urllib.error包含从urllib.request发生的错误或异常;urllib.parse解析url。
* requests是第三方库,不是python基金会实现的,但是功能是很强大的
评述:国内用urllib的比较多,国外用第三方库requests的比较多。相较而言,在python3中,requests的用法要比urllib.request简单得多,所以收到很多人推荐。
Web开发三件套:HTML,CSS,JS
常用标签汇总:(更详细汇总可直接查看:http://www.w3school.com.cn/tags/)
* 单标签
<base href=" " target=" "/>:为页面上的所有链接设定一个基准地址或基准目标,只可出现在head内部
<link rel=" "/>:链接一个外部样式表,只可出现在head内部
<meta >(meta):元信息标签,提供有关页面的元信息,比如针对搜索引擎和更新频率的描述,只可出现在head内部
* 内联标签
<br/>:(blank row或break)换行标签,仅仅是换行,不会生成空白行
<a href=" " title=" " target=" "> - </a>:(anchor)超链接标签,定义超链接,href属性指定了链接的目标
<span> - </span>:(span)用于对行内元素进行组合以便通过样式对其格式化,例如在一行字内某几个字想采用别的颜色
* 块级标签
<h1 > - </h1>:(head)标题标签,一页只能有一个h1,最小为h6
<p >...</p>:(paragraph)段落标签,上下自动生成空白行
<div >:(division)分块标签,其包含的内容被设定为一个独立的块,上下自动生成空白行
div中可包含其他html标签或文本内容
</div>
<ul type="disc"> :(unordered list)无序列表。type可取三个值,这里disc为实心小圆点(默认样式)
<li></li>
<li></li>
<li></li>
</ul>
标签的属性:
* id
* class
* name
* style