Python爬虫编程实践task1

{“cells”: [{“cell_type”: “markdown”,“metadata”: {},“source”: [“# 互联网、HTTP\n”,“\n”,“## 互联网\n”,“\n”,“互联网也叫因特网(Internet),是指网络与网络所串联成的庞大网络,这些网络以一组标准的网络协议族相连,连接全世界几十亿个设备,形成逻辑上的单一巨大国际网络。它由从地方到全球范围...
摘要由CSDN通过智能技术生成

{
“cells”: [
{
“cell_type”: “markdown”,
“metadata”: {},
“source”: [
“# 互联网、HTTP\n”,
“\n”,
“## 互联网\n”,
“\n”,
“互联网也叫因特网(Internet),是指网络与网络所串联成的庞大网络,这些网络以一组标准的网络协议族相连,连接全世界几十亿个设备,形成逻辑上的单一巨大国际网络。它由从地方到全球范围内几百万个私人的、学术界的、企业的和政府的网络所构成。通过电子、无线和光纤等一系列广泛的技术来实现。这种将计算机网络互相连接在一起的方法可称作“网络互联”,在此基础上发展出来的覆盖全世界的全球性互联网络称为“互联网”,即相互连接在一起的网络。\n”,
“\n”,
提示:\n”,
“互联网并不等于万维网(WWW),万维网只是一个超文本相互链接而成的全球性系统,而且是互联网所能提供的服务之一。互联网包含广泛的信息资源和服务,例如相互关联的超文本文件,还有万维网的应用,支持电子邮件的基础设施、点对点网络、文件共享,以及IP电话服务。\n”,
“\n”,
“## HTTP\n”,
“\n”,
“HTTP是一个客户端(用户)和服务器端(网站)之间进行请求和应答的标准。通过使用网页浏览器、网络爬虫或者其他工具,客户端可以向服务器上的指定端口(默认端口为80)发起一个HTTP请求。这个客户端成为客户代理(user agent)。应答服务器上存储着一些资源码,比如HTML文件和图像。这个应答服务器成为源服务器(origin server)。在用户代理和源服务器中间可能存在多个“中间层”,比如代理服务器、网关或者隧道(tunnel)。尽管TCP/IP是互联网最流行的协议,但HTTP中并没有规定必须使用它或它支持的层。\n”,
“\n”,
“事实上。HTTP可以在互联网协议或其他网络上实现。HTTP假定其下层协议能够提供可靠的传输,因此,任何能够提供这种保证的协议都可以使用。使用TCP/IP协议族时RCP作为传输层。通常由HTTP客户端发起一个请求,创建一个到服务器指定端口(默认是80端口)的TCP链接。HTTP服务器则在该端口监听客户端的请求。一旦收到请求,服务器会向客户端返回一个状态(比如“THTTP/1.1 200 OK”),以及请求的文件、错误信息等响应内容。\n”,
“\n”,
“HTTP的请求方法有很多种,主要包括以下几个:\n”,
“\n”,
“- GET:向指定的资源发出“显示”请求。GET方法应该只用于读取数据,而不应当被用于“副作用”的操作中(例如在Web Application中)。其中一个原因是GET可能会被网络蜘蛛等随意访问。\n”,
“\n”,
“- HEAD:与GET方法一样,都是向服务器发出直顶资源的请求,只不过服务器将不会出传回资源的内容部分。它的好处在于,使用这个方法可以在不必传输内容的情况下,将获取到其中“关于该资源的信息”(元信息或元数据)。\n”,
“\n”,
“- POST:向指定资源提交数据,请求服务器进行处理(例如提交表单或者上传文件)。数据被包含在请求文本中。这个请求可能会创建新的资源或修改现有资源,或二者皆有。\n”,
“\n”,
“- PUT:向指定资源位置上传输最新内容。\n”,
“\n”,
“- DELETE:请求服务器删除Request-URL所标识的资源,或二者皆有。\n”,
“\n”,
“- TRACE:回显服务器收到的请求,主要用于测试或诊断。\n”,
“\n”,
“- OPTIONS:这个方法可使服务器传回该资源所支持的所有HTTP请求方法。用“\”来代表资源名称向Web服务器发送OPTIONS请求,可以测试服务器共能是否正常。\n",
“\n”,
“- CONNECT:HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。通常用于SSL加密服务器的连接(经由非加密的HTTP代理服务器)。方法名称是区分大小写的。当某个请求所针对的资源不支持对应的请求方法的时候,服务器应当返回状态码405(Method Not Allowed),当服务器不认识或者不支持对应的请求方法的时候,应当返回状态码501(Not Implemented)。\n”
]
},
{
“cell_type”: “markdown”,
“metadata”: {},
“source”: [
“# 网页基础\n”,
“\n”,
“## 网页组成\n”,
“\n”,
“我们的数据来源是网页,那么我们在真正抓取数据之前,有必要先了解一下一个网页的组成。\n”,
“\n”,
“网页是由 HTML 、 CSS 、JavaScript 组成的。\n”,
“\n”,
“HTML 是用来搭建整个网页的骨架,而 CSS 是为了让整个页面更好看,包括我们看到的颜色,每个模块的大小、位置等都是由 CSS 来控制的, JavaScript 是用来让整个网页“动起来”,这个动起来有两层意思,一层是网页的数据动态交互,还有一层是真正的动,比如我们都见过一些网页上的动画,一般都是由 JavaScript 配合 CSS 来完成的。\n”,
“\n”,
“我们打开 Chrome 浏览器,随便打开一个网站,打开 F12 开发者工具,可以看到:\n”,
“\n”,
“\n”,
python4.jpg\n”,
“\n”,
“在选项 Elements 中可以看到网页的源代码,这里展示的就是 HTML 代码。\n”,
“\n”,
“不同类型的文字通过不同类型的标签来表示,如图片用 <img> 标签表示,视频用 <video> 标签表示,段落用 <p> 标签表示,它们之间的布局又常通过布局标签 <div> 嵌套组合而成,各种标签通过不同的排列和嵌套才形成了网页的框架。\n”,
“\n”,
“在右边 Style 标签页中,显示的就是当前选中的 HTML 代码标签的 CSS 层叠样式,“层叠”是指当在HTML中引用了数个样式文件,并且样式发生冲突时,浏览器能依据层叠顺序处理。“样式”指网页中文字大小、颜色、元素间距、排列等格式。\n”,
“\n”,
“而 JavaScript 就厉害了,它在 HTML 代码中通常使用 <script> 进行包裹,可以直接书写在 HTML 页面中,也可以以文件的形式引入。\n”,
“\n”,
“\n”,
“## 网页结构\n”,
“我们来手写一个简单 HTML 页面来感受下。\n”,
“首先创建一个文本文件,将后缀名改为 .html ,比如demo.html,写入如下内容:”
]
},
{
“cell_type”: “raw”,
“metadata”: {},
“source”: [
“\n”,
“\n”,
" \n",
" <meta charset=“UTF-8”>\n",
" Demo\n",
" \n",
" \n",
" <div id=“container”>\n",
" <div class=“wrapper”>\n",
"

Hello World

\n",
"
Hello Python.
\n",
" \n",
" \n",
" \n",
“”
]
},
{
“cell_type”: “markdown”,
“metadata”: {},
“source”: [
“首先,整个文档是以 DOCTYPE 来开头的,这里定义了文档类型是 html ,整个文档最外层的标签是 <html> ,并且结尾还以 </html> 来表示闭和。\n”,
“\n”,
“这里简单讲一下,浏览器解析 HTML 的时候,并不强制需要每个标签都一定要有闭和标签,但是为了语义明确,最好每个标签都跟上对应的闭和标签。大家可以尝试删除其中的闭和标签进行尝试,并不会影响浏览器的解析。\n”,
“\n”,
“整个 HTML 文档一般分为 head 和 body 两个部分,在 head 头中,我们一般会指定当前的编码格式为 UTF-8 ,并且使用 title 来定义网页的标题,这个会显示在浏览器的标签上面。\n”,
“\n”,
“body 中的内容一般为整个 html 文档的正文,html的标签由<h1>到<h6>六个标签构成,字体由大到小递减,换行标签为<br>,链接使用<a>来创建,herf属性包含链接的URL地址,比如<a href=“http://www.baidu.com” >一个指向百度的链接</a>\n”,
“\n”,
“\n”,
“<a href=“http://www.baidu.com” >一个指向百度的链接”
]
},
{
“cell_type”: “markdown”,
“metadata”: {},
“source”: [
“大多数原色的属性以“名称-值”的形式成对出现,由“=”连接并写在开始标签元素名之后。值一般由单引号或双引号包围,有些值的内容包含特定字符,在html中可以去掉引号。不加引号的属性值被认为是不安全的。要注意的是,许多元素存在一些共同的属性:\n”,
“\n”,
“- id 属性为元素提供在全文档内的唯一标识。它用于识别元素,以便样式表可以改变其外观属性,脚本可以改变、显示或删除其内容或格式化。对于添加到页面的url,它为元素提供了一个全局唯一识别,通常为页面的子章节。\n”,
“\n”,
"- class 属性提供了一种将类似元素分类的方式,常被用于语义化或格式化。例如,一个html文档可以指定class="标记"来表明所有具有这一类值得元素都属于文档的主文本。格式化后,这样的元素可能会聚集在一起,并作为页面脚注而不会出现在html代码中。类值也可以多值声明。如class=“标记 重要"将元素同时放入“标记”与“重要”两类中。\n”,
“\n”,
“- style 属性可以将表现性质赋予一个特定原色。比起使用id或class属性从样式表中选择元素,“style”被认为是一个更好的做法。\n”,
“\n”,
“- tile 属性用于给元素一个附加的说明。大多数浏览器中这一属性显示为工具提示。\n”,
“\n”,
“\n”,
“\n”,
“将上面创建的.html文件用浏览器打开,这个页面的显示如下:\n”,
“\n”,
html-base-1.png
]
},
{
“cell_type”: “markdown”,
“metadata”: {},
“source”: [
“## HTML DOM\n”,
“在 HTML 中,所有标签定义的内容都是节点,它们构成了一个 HTML DOM 树。\n”,
“\n”,
“根据 W3C 的 HTML DOM 标准,HTML 文档中的所有内容都是节点:\n”,
“\n”,
"
整个文档是一个文档节点\n”,
“\n”,
“* 每个 HTML 元素是元素节点\n”,
“\n”,
“* HTML 元素内的文本是文本节点\n”,
“\n”,
“* 每个 HTML 属性是属性节点\n”,
“\n”,
“* 注释是注释节点\n”,
“\n”,
“HTML DOM 将 HTML 文档视作树结构。这种结构被称为节点树:\n”,
“\n”,
ct_htmltree\n”,
“\n”,
“通过 HTML DOM,树中的所有节点均可通过 JavaScript 进行访问。所有 HTML 元素(节点)均可被修改,也可以创建或删除节点。\n”,
“\n”,
“节点树中的节点彼此拥有层级关系。\n”,
“\n”,
“父(parent)、子(child)和同胞(sibling)等术语用于描述这些关系。父节点拥有子节点。同级的子节点被称为同胞(兄弟或姐妹)。\n”,
“\n”,
“* 在节点树中,顶端节点被称为根(root)\n”,
“\n”,
“* 每个节点都有父节点、除了根(它没有父节点)\n”,
“\n”,
“* 一个节点可拥有任意数量的子\n”,
“\n”,
“* 同胞是拥有相同父节点的节点\n”,
“\n”,
“下面的图片展示了节点树的一部分,以及节点之间的关系:\n”,
“\n”,
dom_navigate.gif
]
},
{
“cell_type”: “markdown”,
“metadata”: {},
“source”: [
“## CSS\n”,
“前面我们介绍到 CSS 可以用来美化网页,那么我们简单加一点 CSS 修改下页面的显示效果。”
]
},
{
“cell_type”: “raw”,
“metadata”: {},
“source”: [
“\n”,
“\n”,
" \n",
" <meta charset=“UTF-8”>\n",
" Demo\n",
" <style type=“text/css”>\n",
" .wrapper {\n",
" text-align: center;\n",
" }\n",
" \n",
" \n",
" \n",
" <div id=“container”>\n",
" <div class=“wrapper”>\n",
"

Hello World

\n",
"
Hello Python.
\n",
" \n",
" \n",
" \n",
“”
]
},
{
“cell_type”: “markdown”,
“metadata”: {},
“source”: [
“我们在 head 中添加了 style 标签,并注明其中的内容解析方式为 CSS 。其中的内容的含义是让文本居中显示,先看下增加 CSS 后的页面效果吧:\n”,
“\n”,
html-base-2\n”,
“\n”,
“可以看到,原来居左的文字已经居中显示了。\n”,
“\n”,
“那么,CSS 是如何表示它要修饰的文档结构的呢?这就要说到 CSS 选择器了。\n”,
“\n”,
“在CSS中,我们使用CSS选择器来定位节点。例如,上例中 div 节点的 id 为 container ,那么就可以表示为 #container ,其中 # 开头代表选择 id ,其后紧跟 id 的名称。另外,如果我们想选择 class 为 wrapper 的节点,便可以使用 .wrapper ,这里以点 . 开头代表选择 class ,其后紧跟 class 的名称。\n”,
“\n”,
“另外, CSS 选择器还支持嵌套选择,各个选择器之间加上空格分隔开便可以代表嵌套关系,如 #container .wrapper p 则代表先选择 id 为 container 的节点,然后选中其内部的 class 为 wrapper 的节点,然后再进一步选中其内部的 p 节点。另外,如果不加空格,则代表并列关系,如 div#container .wrapper p.text 代表先选择 id 为 container 的 div 节点,然后选中其内部的 class 为 wrapper 的节点,再进一步选中其内部的 class 为 text 的 p 节点。这就是 CSS 选择器,其筛选功能还是非常强大的。\n”,
“\n”,
“如果时间充裕或者想深入学习html和css的同学可以到 <a href=“https://www.runoob.com/html/html-tutorial.html” >菜鸟教程中继续学习”
]
},
{
“attachments”: {},
“cell_type”: “markdown”,
“metadata”: {},
“source”: [
“## 使用开发者工具检查网页\n”,
“\n”,
“如果想要编写一个爬取网页内容的爬虫程序,在动手编写前,最重要的准备工作可能就是检查目标网页了。下面以Chrome为例,看看如何使用开发者工具。以python官网的“python之禅”为例,首先在Chrome中打开https://www.python.org/dev/peps/pep-0020/ ,可以选择“菜单”中的“更多工具” r i g h t a r r
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值