html等有关知识,api使用,request-get使用

互联网

指的是网络和网络所串联成的庞大网络。特点:由一组标准的网络协议相连,逻辑单一,运用技术广泛,覆盖范围广。不过互联网不等于万维网(www),万维网知识一个超文本相互连接而成的全球性系统,是互联网所能提供的服务之一。

HTTP

服务器把网页传给浏览器,实际上就是把网页的HTML代码发送给浏览器,让浏览器显示出来。而浏览器和服务器之间的传输协议是HTTP。

HTTP是在网络上传输HTML的协议,用于浏览器和服务器的通信。

HTTP请求方法
  1. GET:向指定资源发出请求,只有用于取数据
  2. HEAD:与GET方法一样,都是向服务器发出直顶资源的请求,只不过服务器不会出现传回资源内容部分。它的好处在于,使用这个方法可以在不必传输内容的情况下,将获取到其中“关于该资源的信息”(元信息或元数据)。
  3. POST:向指定资源提交数据,请求服务器进行处理(例如提交表单或者上传文件)。数据被包含在请求文本中。这个请求可能会创建新的资源或修改现有资源,或二者皆有。
  4. PUT:向指定资源位置上传输最新内容。
  5. DELETE:请求服务器删除Request-URL所标识的资源,或二者皆有。
  6. TRACE:回显服务器收到的请求,主要用于测试或诊断。
  7. OPTIONS:这个方法可使服务器传回该资源所支持的所有HTTP请求方法。用“*”来代表资源名称向Web服务器发送OPTIONS请求,可以测试服务器共能是否正常。
  8. CONNECT:HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。通常用于SSL加密服务器的连接(经由非加密的HTTP代理服务器)。方法名称是区分大小写的。当某个请求所针对的资源不支持对应的请求方法的时候,服务器应当返回状态码405(Method Not Allowed),当服务器不认识或者不支持对应的请求方法的时候,应当返回状态码501(Not Implemented)。
网页基础
网页组成

网页是由 HTML 、 CSS 、JavaScript 组成的。

HTML 是用来搭建整个网页的骨架,而 CSS 是为了让整个页面更好看,包括我们看到的颜色,每个模块的大小、位置等都是由 CSS 来控制的, JavaScript 是用来让整个网页“动起来”,这个动起来有两层意思,一层是网页的数据动态交互,还有一层是真正的动,比如我们都见过一些网页上的动画,一般都是由 JavaScript 配合 CSS 来完成的。

在HTML网页源代码中,不同类型的文字通过不同类型的标签来表示,
如图片用<img> 标签表示,视频用<video> 标签表示,段落用<p> 标签表示,
它们之间的布局又常通过布局标签<div>嵌套组合而成,
各种标签通过不同的排列和嵌套才形成了网页的框架。
在右边 Style 标签页中,显示的就是当前选中的 HTML 代码标签的 CSS 层叠样式,“层叠”是指当在HTML中引用了数个样式文件,并且样式发生冲突时,浏览器能依据层叠顺序处理。“样式”指网页中文字大小、颜色、元素间距、排列等格式。

而 JavaScript 就厉害了,它在 HTML 代码中通常使用 <script> 进行包裹,可以直接书写在 HTML 页面中,也可以以文件的形式引入。

整个HTML代码是由DOCTYPE 来开头的。整个文档最外层的标签是 html ,并且结尾还以 /html 来表示闭和。

整个 HTML 文档一般分为 head 和 body 两个部分,
在 head 头中,我们一般会指定当前的编码格式为 UTF-8 ,
并且使用 title 来定义网页的标题,这个会显示在浏览器的标签上面。

body 中的内容一般为整个 html 文档的正文
,html的标签由<h1>到<h6>六个标签构成,字体由大到小递减,换行标签为<br>,链接使用<a>来创建,
herf属性包含链接的URL地址,
比如<a href="http://www.baidu.com" >一个指向百度的链接</a>

大多数原色的属性以“名称-值”的形式成对出现,由“=”连接并写在开始标签元素名之后。值一般由单引号或双引号包围,有些值的内容包含特定字符,在html中可以去掉引号。不加引号的属性值被认为是不安全的。
需要注意,许多元素存在一些共同的属性:

  • id 属性为元素提供在全文档内的唯一标识。它用于识别元素,以便样式表可以改变其外观属性,脚本可以改变、显示或删除其内容或格式化
  • class 属性提供了一种将类似元素分类的方式,常被用于语义化或格式化。格式化后,这样的元素可能会聚集在一起,并作为页面脚注而不会出现在html代码中。类值也可以多值声明。如class="标记 重要"将元素同时放入“标记”与“重要”两类中。
  • style 属性可以将表现性质赋予一个特定原色。比起使用id或class属性从样式表中选择元素,“style”被认为是一个更好的做法。
  • tile 属性用于给元素一个附加的说明。大多数浏览器中这一属性显示为工具提示。
HTML DOM

在 HTML 中,所有标签定义的内容都是节点,它们构成了一个 HTML DOM 树。

根据 W3C 的 HTML DOM 标准,HTML 文档中的所有内容都是节点:

  • 整个文档是一个文档节点

  • 每个 HTML 元素是元素节点

  • HTML 元素内的文本是文本节点

  • 每个 HTML 属性是属性节点

  • 注释是注释节点

HTML DOM 将 HTML 文档视作树结构。这种结构被称为节点树


通过 HTML DOM,树中的所有节点均可通过 JavaScript 进行访问。所有 HTML 元素(节点)均可被修改,也可以创建或删除节点。

节点树中的节点彼此拥有层级关系。

父(parent)、子(child)和同胞(sibling)等术语用于描述这些关系。父节点拥有子节点。同级的子节点被称为同胞(兄弟或姐妹)。

  • 在节点树中,顶端节点被称为根(root)

  • 每个节点都有父节点、除了根(它没有父节点)

  • 一个节点可拥有任意数量的子

  • 同胞是拥有相同父节点的节点

request-get

一个网络爬虫程序最普遍的过程:

访问站点;
定位所需的信息;
得到并处理信息。

<pre> 标签可定义预格式化的文本。 被包围在 <pre> 标签
元素中的文本通常会保留空格和换行符。而文本也会呈现为等宽字体。·

最通常的方法是通过r=request.get(url)构造一个向服务器请求资源的url对象。

这个对象是Request库内部生成的。

这时候的r返回的是一个包含服务器资源的Response对象。包含从服务器返回的所有的相关资源。

requests.post

requests.post(url, data=array)
模拟发送POST请求
.text
得到返回的数据

request.get进阶:爬取豆瓣电影
import requests
import os
#判断括号里的文件是否存在
if not os.path.exists('image'):
     os.mkdir('image')

def parse_html(url):
    #User-Agent会告诉网站服务器,访问者是通过什么工具来请求的,如果是爬虫请求,一般会拒绝,如果是用户浏览器,就会应答。
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36"}
    #进行爬取
    res = requests.get(url, headers=headers)
    #得到网页的全部内容
    text = res.text
    item = []
    #一页有25个电影
    for i in range(25):
        #找到电影名字
        text = text[text.find('alt')+3:]
        #extract()函数用来获取meta内容。
        item.append(extract(text))
    return item
       
def extract(text):
    #把文本按照“分割
    text = text.split('"')
    name = text[1]
    image = text[3]
    return name, image

def write_movies_file(item, stars):
    print(item)
    with open('douban_film.txt','a',encoding='utf-8') as f:
        f.write('排名:%d\t电影名:%s\n' % (stars, item[0]))
    r = requests.get(item[1])
    with open('image/' + str(item[0]) + '.jpg', 'wb') as f:
        #content返回的是是二进制的数据。用于取图片和文件
        f.write(r.content)
        
def main():
    stars = 1
    for offset in range(0, 250, 25):
        url = 'https://movie.douban.com/top250?start=' + str(offset) +'&filter='
        for item in parse_html(url):
            write_movies_file(item, stars)
            stars += 1

if __name__ == '__main__':
    main()

代码思路:写一个函数来获取网页内容,然后提取出要爬取的内容,再写入文件,主要是找到url之间的规律,然后循环。


使用api

所谓的采集网络数据,并不一定必须从网页中抓取数据,而api(Application Programming Iterface)的用处就在这里:API为开发者提供了方便友好的接口,不同的开发者用不同的语言都能获取相同的数据。目前API一般会以XML(Extensible Markup Language,可拓展标记语言)或者JSON(JavaScript Object Notation)格式来返回服务器响应,其中JSON数据格式越来越受到人们的欢迎,我们后面的课程也会详细介绍JSON格式。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值