python商业爬虫_商业爬虫学习笔记day1
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") asf: # 此处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
defget_method_params():
url= "http://www.baidu.com/s?wd="name= "美女"final_url= url+nameprint(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对象,如
#读取内容
data =response.read().decode()print(data)#保存到本地
with open("02-encode.html","w",encoding="utf-8")as f:
f.write(data) get_method_params()
python商业爬虫_商业爬虫学习笔记day1相关推荐
- python搞笑语句_云计算开发学习笔记:Python3 import语句
原标题:云计算开发学习笔记:Python3 import语句 想使用 Python 源文件,只需在另一个源文件里执行 import 语句,语法如下: 当解释器遇到 import 语句,如果模块在当前的 ...
- cocos2d python文档_【Cocos2D-X 学习笔记】Cocos2D-x 3.0+VS开发环境搭建[使用Python]
上一节讲了如何用VS自带的项目管理器创建项目,该方法只适用于cocos2d-x 2.0版本,而cocos2d-x 3.0较之前版本在命名等方面有了较大更新,而cocos2d-x3.0不再支持用VS项目 ...
- y空间兑换代码_【CV学习笔记】色彩空间
关注"深度学习冲鸭",一起学习一起冲鸭! 设为星标,第一时间获取更多干货 作者:云时之间来源:知乎链接:https://zhuanlan.zhihu.com/p/103387082 ...
- Python的dict字典结构操作方法学习笔记
Python的dict字典结构操作方法学习笔记 这篇文章主要介绍了Python的dict字典结构操作方法学习笔记本,字典的操作是Python入门学习中的基础知识,需要的朋友可以参考下 一.字典的基本方 ...
- 23神经网络 :唐宇迪《python数据分析与机器学习实战》学习笔记
唐宇迪<python数据分析与机器学习实战>学习笔记 23神经网络 1.初识神经网络 百度深度学习研究院的图,当数据规模较小时差异较小,但当数据规模较大时深度学习算法的效率明显增加,目前大 ...
- 《深度学习入门-基于Python的理论与实现》学习笔记1
<深度学习入门-基于Python的理论与实现>学习笔记1 第一章Python入门 Python是一个简单.易读.易记的编程语言,可以用类似于英语的语法进行编写程序,可读性高,且能写出高性能 ...
- ELK搜索学习笔记--Day1
ELK搜索学习笔记–Day1 1. 课程简介 1.1 课程内容 ELK是包含但不限于Elasticsearch(简称es).Logstash.Kibana 三个开源软件的组成的一个整体.这三个软件合成 ...
- HCIA学习笔记day1
HCIA学习笔记day1 衡量网络优劣的几个标准: 带宽:在一段时间内,从一个点到另一个点的最大传输量 传输的数据量单位是比特 延迟:数据从一个点到达另一个点所经历的时间 200Mbps 单位是比特 ...
- [深度学习]Part1 Python学习进阶Ch23爬虫Spider——【DeepBlue学习笔记】
本文仅供学习使用 Python高级--Ch23爬虫Spider 23. 爬虫Spider 23.1 HTTP基本原理 23.1.1 URI与URL 23.1.2 超文本 23.1.3 HTTP 和 H ...
- 《商业洞察力30讲》学习笔记(上)
[洞察力]| 作者 / Edison Zhou 这是恰童鞋骚年的第197篇原创文章 学习洞察力,也是新时代IT人员的一门进阶必修课... 1学习背景 2019年下半年至今,在领导的推荐下学习了刘润老师 ...
最新文章
- C++中对象数组的构造函数和析构函数调用
- 计算机语言表示教师节快乐,表达教师节快乐的微信祝福语大汇总54句
- android切换线程的方法,android 主线程切换方法
- 艾伟:彻底解决刷新重复提交问题,你还在用Response.Redirect吗?
- 单位阶跃信号是周期信号吗_直流散热风扇的信号你知道如何控制吗?
- vCenter 或者 vmwareworkstation 虚拟机 安装vmware tools
- 双击java安装包没有反应_eclipse安装包双击没反应怎么回事?
- 数据结构课程设计(已完结)
- 计算机无法屏保,Win7屏幕保护程序不能修改怎么办 win7无法设置电脑屏幕保护程序如何解决...
- Python3网络爬虫(三):漫画下载,动态加载、反爬虫这都不叫事!
- 乔布斯自传预售即夺下销售冠军
- 浪潮之巅·IT从业者或投资人必读书籍
- python爬取12306火车票信息_python利用selenium+requests+beautifulsoup爬取12306火车票信息...
- 企鹅日记(十一):账号管理与ACL权限设置
- C语言万年历(n排)
- 【OpenCV入门学习--python】Image Segmentation with Distance Transform and Watershed Algorithm图像分割
- 9月15日相约苏州丨共同探讨数智化时代,国产数据库的技术创新与实践
- kali linux 获取ip_Kali Linux常用服务配置教程获取IP地址
- 为什么不要把鸡蛋放在同一个篮子里?
- liunx下查看tomcat占用的端口号
热门文章
- AI | 优化背后的数学基础
- 中国 83 所高校上榜,清华位列第 15!QS 2021 年世界大学排名出炉
- 2020各省份大学排名出炉!
- 用了这么多年 Spring Boot 你知道他爹有多大背景吗?
- 麻省理工深度学习基础公开课.ppt
- 终于有人把 Docker 讲清楚了,万字详解!【建议收藏】
- 线性回归的改进-岭回归
- 华为秋招_多数组合并问题
- Java基础。public,private,static变量!以及一个实例化的小例子 以及方法
- (解释)常见的无线路由器采用( A)技术。 A. WiFi B. AP C. UWB D. ZigBee