Datawhale第十二期组队学习--Python爬虫编程实践 Task01:html等有关知识,api使用,request-get使用

学习参考链接

一. 互联网 HTTP

互联网
  1. 互联网也叫因特网(Internet),是指网络与网络所串联成的庞大网络,这些网络以一组标准的网络协议族相连,连接全世界几十亿个设备,形成逻辑上的单一巨大国际网络。
  2. 互联网并不等于万维网(WWW),万维网只是一个超文本相互链接而成的全球性系统,而且是互联网所能提供的服务之一。
HTTP
  1. HTTP是一个客户端(用户)和服务器端(网站)之间进行请求和应答的标准。
  2. 通常由HTTP客户端发起一个请求,创建一个到服务器指定端口(默认是80端口)的TCP链接。HTTP服务器则在该端口监听客户端的请求。一旦收到请求,服务器会向客户端返回一个状态(比如“THTTP/1.1 200 OK”),以及请求的文件、错误信息等响应内容。
  3. HTTP的请求方法有很多种,主要包括以下几个:
  • GET:向指定的资源发出“显示”请求。GET方法应该只用于读取数据,而不应当被用于“副作用”的操作中(例如在Web Application中)。其中一个原因是GET可能会被网络蜘蛛等随意访问。
  • HEAD:与GET方法一样,都是向服务器发出直顶资源的请求,只不过服务器将不会出传回资源的内容部分。它的好处在于,使用这个方法可以在不必传输内容的情况下,将获取到其中“关于该资源的信息”(元信息或元数据)。
  • POST:向指定资源提交数据,请求服务器进行处理(例如提交表单或者上传文件)。数据被包含在请求文本中。这个请求可能会创建新的资源或修改现有资源,或二者皆有。
  • PUT:向指定资源位置上传输最新内容。
  • DELETE:请求服务器删除Request-URL所标识的资源,或二者皆有。
  • TRACE:回显服务器收到的请求,主要用于测试或诊断。
  • OPTIONS:这个方法可使服务器传回该资源所支持的所有HTTP请求方法。用“*”来代表资源名称向Web服务器发送OPTIONS请求,可以测试服务器共能是否正常。
  • CONNECT:HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。通常用于SSL加密服务器的连接(经由非加密的HTTP代理服务器)。方法名称是区分大小写的。当某个请求所针对的资源不支持对应的请求方法的时候,服务器应当返回状态码405(Method Not Allowed),当服务器不认识或者不支持对应的请求方法的时候,应当返回状态码501(Not Implemented)。

二. 网页基础

网页组成

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

网页结构
  1. 在 HTML 中,所有标签定义的内容都是节点,它们构成了一个 HTML DOM 树。
  2. 根据 W3C 的 HTML DOM 标准,HTML 文档中的所有内容都是节点:
  • 整个文档是一个文档节点
  • 每个 HTML 元素是元素节点
  • HTML 元素内的文本是文本节点
  • 每个 HTML 属性是属性节点
  • 注释是注释节点

HTML DOM 将 HTML 文档视作树结构。这种结构被称为节点树:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-o5Cb5wVK-1587455612179)(在这里插入图片描述])
节点关系

使用开发者工具检查网页

Chrome的开发者模式为用户提供了下面几组工具。

  • Elements:允许用户从浏览器的角度来观察网页,用户可以借此看到Chrome渲染页面所需要的HTML、CSS和DOM(Document Object Model)对象。

  • Network:可以看到网页向服务气请求了哪些资源、资源的大小以及加载资源的相关信息。此外,还可以查看HTTP的请求头、返回内容等。

  • Source:即源代码面板,主要用来调试JavaScript。

  • Console:即控制台面板,可以显示各种警告与错误信息。在开发期间,可以使用控制台面板记录诊断信息,或者使用它作为shell在页面上与JavaScript交互。

  • Performance:使用这个模块可以记录和查看网站生命周期内发生的各种事情来提高页面运行时的性能。

  • Memory:这个面板可以提供比Performance更多的信息,比如跟踪内存泄漏。

  • Application:检查加载的所有资源。

  • Security:即安全面板,可以用来处理证书问题等。

三. requests

requests.get 读取python之禅
requests.post翻译python之禅

# coding:utf-8

import requests


# 爬取python之禅
def craw():
    url = 'https://www.python.org/dev/peps/pep-0020/'
    res = requests.get(url)
    text = res.text
    # print(text)
    with open('zen_of_python.txt', 'w') as f:
        # 官方
        f.write(text[text.find('<pre')+28:text.find('</pre>')-1])
        # 使用xpath或者re
        # path = '<pre class="literal-block">(.*?)</pre>'
        # f.write(re.compile(path).findall(text))
    print(text.find('<pre')+28, text.find('</pre>')-1)


# 翻译zen of python
def translate(word):
    url = 'http://fy.iciba.com/ajax.php?a=fy'
    data = {'f': 'auto', 't': 'auto', 'w': word}
    headers = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36'}
    response = requests.post(url, data=data, headers=headers)
    return response.json()


# 获取翻译结果
def run(word):
    return translate(word)['content']['out']


def main():
    craw()
    with open('zen_of_python.txt', 'r') as f:
        result = [run(word) for word in f]
    with open('zen_of_python_zh_CN.txt', 'w') as f:
        for i in result:
            f.write(i + '\n')


if __name__ == '__main__':
    main()

request.get进阶:爬取豆瓣电影
# coding:utf-8

import requests
from lxml import etree


# 获取豆瓣top250所有页的url
def get_urls():
    base_url = 'https://movie.douban.com/top250?start='
    urls = []
    for i in range(0, 251, 25):
        urls.append(base_url+str(i))
    return urls


# 读取html
def read_url_text(url):
    headers = {
        'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36'
    }
    response = requests.get(url, headers=headers)
    return response.text


# 解析html获取数据
def parse_html(text):
    page_data = []
    html = etree.HTML(text)
    lis = html.xpath('//ol[@class="grid_view"]/li')
    for i, ele in enumerate(lis):
        rank = ele.xpath('//div[@class="item"]//div[@class="pic"]//em/text()')[i]
        pic_path = ele.xpath('//div[@class="item"]//div[@class="pic"]//a/img/@src')[i]
        film_name = ele.xpath('//div[@class="item"]//div[@class="info"]//div[@class="hd"]/a/span[1]/text()')[i]
        page_data.append((rank, film_name, pic_path))
    return page_data


def main():
    urls = get_urls()
    result = []
    for url in urls:
        text = read_url_text(url)
        result.extend(parse_html(text))
    with open('db_top250.txt', 'w') as f:
        for i in result:
            f.write(str(i) + '\n')


if __name__ == '__main__':
    main()

四. JavaScript与AJAX技术

JavaScript语言的特点
  • 动态语言
    动态语言是指程序在运行时可以改变其结构:新的函数可以被引进,已有的函数可以被删除等在结构上的变化。JavaScript便是一个动态语言。除此之外如Ruby、Python等也都属于动态语言,而C、C++等语言则不属于动态语言。比如在JavaScript中可以在对象定义之后动态的为其添加属性和方法

  • 脚本语言
    脚本语言是为了缩短传统的编写-编译-链接-运行(edit-compile-link-run)过程而创建的计算机编程语言,只在被调用时进行解释或编译,然后执行。它的命名起源于一个脚本“screenplay”,每次运行都会使对话框逐字重复。早期的脚本语言经常被称为批量处理语言或工作控制语言。

  • 弱类型

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sapphire~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值