day1

一. HTTP

1.介绍:

https://www.cnblogs.com/vamei/archive/2013/05/11/3069788.html

http://blog.csdn.net/guyuealian/article/details/52535294

2.当用户输入网址(如www.baidu.com),发送网络请求的过程是什么?

上图应该还有往回的箭头(即服务器从数据库获取得到指定的请求资源,返回给客户端)

a. 通过域名服务器解析出www.baidu.com对应的ip地址

(1)先要知道默认网关的mac地址(通过arp协议获取默认网关的mac地址)

(2)组织数据,发送给默认网关(ip还是dns服务器的ip,但是mac地址是默认网关的mac地址)

(3)默认网关拥有转发数据的能力,把数据转发给路由器

(4)路由器根据自己的路由协议,来选择一个合适的较快的路径,转发数据给目的网关

(5)目的网关(dns服务器所在的网关)把数据转发给dns服务器

(6)dns服务器查询解析出www.baidu.com对应的ip地址,并把它原路返回给请求这个域名的client

b. 得到了baidu.com的ip地址后,进行tcp的3次握手,从而达到client与server的连接

c.通过http协议发送请求数据给对应的web服务器

d.web服务器收到数据请求之后,通过查询自己的服务器从而得到client请求的资源,原路返回给请求者(浏览器)

d.浏览器收到数据后,通过浏览器自己的渲染功能来显示这个网页

e.浏览器关闭tcp连接,即4次挥手

2.http的请求方式

(1)get请求

向特定的资源发出请求,其参数直接出现在url中,不安全,此外请求有长度限制,获取的数据只能是ASCII码类型数据

(2)post请求

向指定资源提交数据进行处理请求(例如提交表单或者上传文件),数据(允许二进制数据)被包含在请求体中。请求方式安全,请求没有长度限制。POST请求可能会导致新的资源的创建或已有资源的修改

(3)PUT

向指定资源位置上传其最新内容

(4)delete

请求服务器删除Request-URI所标识的资源

(5)trace

客户端可以对请求消息的传输路径进行追踪,其是让web服务器端将之前的请求通信还给客户端的方法,主要用于测试和诊断

(6)head

类似get请求,其返回的响应中没有具体的内容(即不返回报文的主体部分)

(7)options

返回服务器针对特定资源所支持的HTTP请求方法(即客户端询问服务器可以提交哪些请求方法)

(8)connect

HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器

connect方法要求在与代理服务器通信时简历隧道,实现用隧道协议进行TCP通信。主要使用SSL(安全套接层)和TLS(传输层安全)协议把通信内容加密后经网络隧道传输

虽然HTTP的请求方式有8种,但是我们再实际应用中常用的也就是get和post,其他请求方式也都可以通过这两种方式间接来实现

3.http和https的区别

(1)https协议要CA(Certificate Authority, 证书授权中心)证书,需要一定的经济成本

(2)http是明文传输,https是加密的安全传输,所以https相对于http传输比较安全

(3)连接端口不一样,http是80,https是443

4.请求头(request header)内容

(1)Accept:⽂文本的格式
(2)Accept-Encoding:编码格式
(3)Connection:长链接 短链接
(4)Cookie:验证⽤的
(5)Host:域名
(6)Referer:标志从哪个页面跳转过来的
(7)User-Agent:浏览器和⽤户的信息

二. 爬虫入门

(1)爬虫的价值:

1.买卖数据(⾼高端的领域价格特别贵)
2.数据分析:出分析报告
3.流量量
4.指数阿里指数,百度指数

(2)合法性:灰⾊色产业
政府没有法律律规定爬⾍虫是违法的,也没有法律律规定爬⾍虫是合法的
公司概念:公司让你爬数据库(窃取商业机密)责任在公司
(3)爬⾍虫可以爬取所有东⻄西?(不是)爬⾍只能爬取⽤用户能访问到的数据
爱奇艺的视频(vip,非vip)
1.普通⽤用户 只能看非vip 爬取非vip的的视频
2.vip 爬取vip的视频
3.普通用户想要爬取vip视频(⿊黑客)

三. 爬虫的分类

(1)通⽤用爬⾍虫
1.使⽤用搜索引擎:百度 谷歌 360 雅虎 搜狗
优势:开放性 速度快
劣势:⽬标不明确
返回内容:基本上%90是⽤户不需要的
不清楚用户的需求在哪里
(2)聚焦爬⾍虫(学习)
1.⽬标明确
2.对⽤户的需求非常精准
3.返回的内容很固定
增量式:翻⻚:从第⼀⻚请求到最后⼀页

Deep 深度爬⾍虫:

静态数据:html css
动态数据:js代码,加密的js

(3)robots

Robots协议(也称为爬虫协议、机器人协议等)的全称是“网络爬虫排除标准”(Robots Exclusion Protocol),网站通过Robots协议告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取。您可以在您的网站中创建一个纯文本文件robots.txt,在这个文件中声明该网站中不想被robot访问的部分,这样,该网站的部分或全部内容就可以不被搜索引擎收录了,或者指定搜索引擎只收录指定的内容。

聚焦爬虫不遵守robots

四. 爬虫的工作原理

确定抓取目标的url是哪一个--->使用代码发送请求获取数据--->解析获取到的数据--->若有新的目标(url),回到第一步--->数据持久化(如,将数据写入文件中)

1. python3(原生提供的模块):urlib.request

(1) urlopen:

a.返回response对象

b. response.read()

c. bytes.decode("utf-8")

(2) get:传参   (没传data就默认使用get请求,传了data就post请求)

1.汉字报错 :解释器ascii没有汉字,url汉字转码
(3)post
(4)handle处理器的⾃定义
(5)urlError

五.代码

发送请求

import urllib.request

def load_data():
url = "http://www.baidu.com/"
response = urllib.request.urlopen(url) # 发送请求
print(response)
data = response.read() # 读取到的内容为bytes
print(data)
# 将文件获取的内容转换成字符串
str_data = data.decode("utf-8")
print(str_data)
# 将数据写入文件
with open("baidu.html", "w",encoding="utf-8") as f: # 此处encoding="utf-8"一定要写,否则报错
f.write(str_data)
load_data()

#python爬取的类型:str bytes
#如果爬取回来的是bytes类型:但是你写入的时候需要字符串 decode("utf-8")
#如果爬取过来的是str类型:但你要写入的是bytes类型 encode(""utf-8")

 

发送带参数的请求

import urllib.request

def get_method_params():
url = "http://www.baidu.com/s?wd="
name = "美女"
final_url = url + name
print(final_url)
# 使用代码发送网络请求
response = urllib.request.urlopen(final_url)
print(response) get_method_params()

这样运行会报错UnicodeEncodeError: 'ascii' codec can't encode characters in position 10-11: ordinal not in range(128)

原因:python:是解释性语言;解析器只支持 ascii 码,不支持中文,此处的final_url包含了中文,所以就要进行url的转译,如将url(https://www.baidu.com/s?wd=美女)复制到pycharm中会直接转译,如下:

但我复制到自己的pycharm不会产生转译(怀疑视频老师讲错了)

自己查到的原因(不知道是否正确):Url的编码格式采用的是ASCII,而不是Unicode,这也就是说你不能在Url中包含任何非ASCII字符,例如中文。否则如果客户端浏览器和服务端浏览器支持的字符集不同的情况下,中文可能会赵成问题

转译要用到parse,string模块,如下


import urllib.request
import urllib.parse
import string

def get_method_params():

    url = "http://www.baidu.com/s?wd="
name = "美女"
final_url = url+name
print(final_url)
#将包含汉字的网址进行转译
encode_new_url = urllib.parse.quote(final_url,safe=string.printable)
print(encode_new_url)
# 使用代码发送网络请求
response = urllib.request.urlopen(encode_new_url)
print(response) # 返回的是http对象,如<http.client.HTTPResponse object at 0x0000028324337780>
  #读取内容 
  data = response.read().decode() print(data)
  #保存到本地
  with open("02-encode.html","w",encoding="utf-8")as f:
     f.write(data)
get_method_params()

商业爬虫学习笔记day1的更多相关文章

  1. 商业爬虫学习笔记day2

    1. get传参 (1)url中包含中文报错解决方法 urllib.request.quote("包含中文的url", safe = "string.printtable ...

  2. 商业爬虫学习笔记day5

    一. 发送post请求 import requests url = "" # 发送post请求 data = { } response = requests.post(url, d ...

  3. 商业爬虫学习笔记day4

    一.获取登录后页面信息的两种方法 1.第一种方法: 人为把有效cookies加到请求头中,代码如下 import urllib.request # 确定url url = "https:// ...

  4. 商业爬虫学习笔记day3

    一. 付费代理发送请求的两种方式 第一种方式: (1)代理ip,形式如下: money_proxy = {"http":"username:pwd@192.168.12. ...

  5. 商业爬虫学习笔记day8-------json的使用

    一. 简介 JSON,全称为JavaScript Object Notation(JavaScript对象标记),它通过对象和数组的组合来表示数据,是一种轻量级的数据交换格式.它基于 ECMAScri ...

  6. 商业爬虫学习笔记day7-------解析方法之bs4

    一.Beautiful Soup 1.简介 Beautiful Soup 是python的一个库,最主要的功能是从网页抓取数据.其特点如下(这三个特点正是bs强大的原因,来自官方手册) a. Beau ...

  7. 商业爬虫学习笔记day6

    一. 正则解析数据 解析百度新闻中每个新闻的title,url,检查每个新闻的源码可知道,其title和url都位于<a></a>标签中,因为里面参数的具体形式不一样,同一个正 ...

  8. python网络爬虫学习笔记

    python网络爬虫学习笔记 By 钟桓 9月 4 2014 更新日期:9月 4 2014 文章文件夹 1. 介绍: 2. 从简单语句中開始: 3. 传送数据给server 4. HTTP头-描写叙述 ...

  9. OpenCV图像处理学习笔记-Day1

    OpenCV图像处理学习笔记-Day1 目录 OpenCV图像处理学习笔记-Day1 第1课:图像读入.显示和保存 1. 读入图像 2. 显示图像 3. 保存图像 第2课:图像处理入门基础 1. 基本 ...

随机推荐

  1. best-time-to-buy-and-sell-stock leetcode C++

    Say you have an array for which the i th element is the price of a given stock on day i. If you were ...

  2. dart系列之:dart语言中的函数

    目录 简介 函数的参数 main函数 匿名函数 闭包 函数的返回值 总结 简介 函数是所有编程语言都有的内容,不管是面向对象还是面向过程,函数都是非常重要的一部分.dart中的函数和java中的函数有 ...

  3. Springboot 整合RabbitMq ,用心看完这一篇就够了

    该篇文章内容较多,包括有rabbitMq相关的一些简单理论介绍,provider消息推送实例,consumer消息消费实例,Direct.Topic.Fanout的使用,消息回调.手动确认等. (但是 ...

  4. 自由导入你的增量数据-根据条件将sqlserver表批量生成INSERT语句的存储过程实施笔记

    文章标题: 自由导入你的增量数据-根据条件将sqlserver表批量生成INSERT语句的存储过程增强版 关键字 : mssql-scripter,SQL Server 文章分类: 技术分享 创建时间 ...

  5. 如何用webgl(three.js)搭建一个3D库房,3D密集架,3D档案室(升级版)

    很长一段时间没有写3D库房,3D密集架相关的效果文章了,刚好最近有相关项目落地,索性总结一下 与之前我写的3D库房密集架文章<如何用webgl(three.js)搭建一个3D库房,3D密集架,3 ...

  6. 【linux系统】命令学习(六)awk sed grep 与管道的使用

    程序运行环境输入与输出 标准输入0 read a;echo $a 标准输出1 echo cesh 错误输出 ls notr 管道重定向 管道与管道之间可以重定向 管道与文件之间可以重定向 用于写入 将 ...

  7. 说透 Docker:虚拟化

    本章内容将讲解 Docker 虚拟化.虚拟化本质.namespace.cgroups. Docker 虚拟化 关于Docker 本小节将介绍 Docker 虚拟化的一些特点. Docker 是一个开放 ...

  8. 【拥抱元宇宙】创建你的第一个Unity程序HelloWorld,并发布

    第一个Unity程序--Hello World. 1.需要先下载一个Unity Hub,以及安装Unity编辑器.Unity Hub需要登陆,激活码可以选择个人用户,免费的.免费的无法改变启动画面,其 ...

  9. Javascript复制内容到剪贴板,解决navigator.clipboard Cannot read property 'writeText' of undefined

    起因 最近帮同事实现了一个小功能--复制文本到剪贴板,主要参考了前端大神阮一峰的博客,根据 navigator.clipboard 返回的 Clipboard 对象的方法 writeText() 写文 ...

  10. 第十四章 kubernetes 核心技术-调度器

    一.概述 一个容器平台的主要功能就是为容器分配运行时所需要的计算,存储和网络资源.容器调 度系统负责选择在最合适的主机上启动容器,并且将它们关联起来.它必须能够自动的处 理容器故障并且能够在更多的主机 ...