1.http:(1)当?用户在地址输?入了了?网址 发送?网络请求的过程是什什么
(2)http的请求?方式
get请求
(1)?比较便便捷
缺点:不不安全:明?文
参数的?长度有限制
post请求
(1)?比较安全
(2)数据整体没有限制
(3)上传?文件
put(不不完全的)
delete(删除?一些信息)
head(请求头)
发送?网络请求(需要带?一定的数据给服务器?不不带数据也可以)
请求头?里里?面requestheader
返回数据:response
(1)Accept:?文本的格式
(2)Accept-Encoding:编码格式
(3)Connection:?长链接 短链接
(4)Cookie:验证?用的
(5)Host:域名
(6)Referer:标志从哪个?页?面跳转过来的
(7)User-Agent:浏览器?和?用户的信息
2.爬?虫?入?门:使?用代码模拟?用户 批量量的发送?网络请求 批量量的获取数据
(1)爬?虫的价值:
1.买卖数据(?高端的领域价格特别贵)
2.数据分析:出分析报告
3.流量量
4.指数阿?里里指数,百度指数
(3)合法性:灰?色产业
政府没有法律律规定爬?虫是违法的,也没有法律律规定爬?虫是合法的
公司概念:公司让你爬数据库(窃取商业机密)责任在公司
(4)爬?虫可以爬取所有东?西?(不不是)爬?虫只能爬取?用户能访问到的数据
爱奇艺的视频(vip?非vip)
1.普通?用户 只能看?非vip 爬取?非vip的的视频
2.vip 爬取vip的视频
3.普通?用户想要爬取vip视频(?黑客)
爬?虫的分类:(1)通?用爬?虫
1.使?用搜索引擎:百度 ?谷歌 360 雅?虎 搜狗
优势:开放性 速度快
劣势:?目标不不明确
返回内容:基本上%90是?用户不不需要的
不不清楚?用户的需求在哪?里里
(2)聚焦爬?虫(学习)
1.?目标明确
2.对?用户的需求?非常精准
3.返回的内容很固定
增量量式:翻?页:从第?一?页请求到最后?一?页
Deep 深度爬?虫:静态数据:html css
动态数据:js代码,加密的js
robots:是否允许其他爬?虫(通?用爬?虫)爬取某些内容
聚焦爬?虫不不遵守robots
爬?虫和反扒做?斗争:资源对等 胜利利的永远是爬?虫
爬?虫的?工作原理理:
1.缺?人你抓取?目标的url是哪?一个(找)
2.使?用python代码发送请求获取数据(java Go)
3.解析获取到的数据(精确数据)
(1)找到新的?目标(url)回到第?一步(?自动化)
4.数据持久化
python3(原?生提供的模块):urlib.rquest:
(1)urlopen :
1.返回response对象
2.response.read()
3.bytes.decode("utf-8")
(2)get:传参
1.汉字报错 :解释器?ascii没有汉字,url汉字转码
(3)post
(4)handle处理理器?的?自定义
(5)urlError
python(原?生提供的):urlib2
接下来将的知识点:
5.request(第三?方)
6.数据解析:xpath bs4
7.数据存储
import urllib.request def load_data(): url = "http://www.baidu.com/" #get的请求 #http请求 #response:http相应的对象 response = urllib.request.urlopen(url) print(response) #读取内容 bytes类型 data = response.read() print(data) #将文件获取的内容转换成字符串 str_data = data.decode("utf-8") print(str_data) #将数据写入文件 with open("baidu.html","w",encoding="utf-8")as f: f.write(data) #将字符串类型转换成bytes str_name = "baidu" bytes_name =str_name.encode("utf-8") print(bytes_name) #python爬取的类型:str bytes #如果爬取回来的是bytes类型:但是你写入的时候需要字符串 decode("utf-8") #如果爬取过来的是str类型:但你要写入的是bytes类型 encode(""utf-8") load_data()
import urllib.request import urllib.parse import string def get_method_params(): url = "http://www.baidu.com/s?wd=" #拼接字符串(汉字) #python可以接受的数据 #https://www.baidu.com/s?wd=%E7%BE%8E%E5%A5%B3 name = "美女" final_url = url+name print(final_url) #代码发送了请求 #网址里面包含了汉字;ascii是没有汉字的;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) #读取内容 data = response.read().decode() print(data) #保存到本地 with open("02-encode.html","w",encoding="utf-8")as f: f.write(data) #UnicodeEncodeError: ‘ascii‘ codec can‘t encode # characters in position 10-11: ordinal not in range(128) #python:是解释性语言;解析器只支持 ascii 0 - 127 #不支持中文 get_method_params()
原文:https://www.cnblogs.com/sunBinary/p/10555630.html