爬虫1

一、http:

当⽤户在地址输⼊了⽹址 发送⽹络请求的过程是什么

1、http的请求⽅式
(1)get请求
优点: ⽐较便捷
缺点:不安全;明⽂;参数的⻓度有限制

(2)post请求
⽐较安全;数据整体没有限制;上传⽂件

(3)put(不完全的)
(4)delete(删除⼀些信息)

2、head(请求头)
发送⽹络请求(需要带⼀定的数据给服务器不带数据也可以)
请求头⾥⾯requestheader
返回数据:response
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视频(⿊客)

4、爬⾍的分类

(1)通⽤爬⾍
使⽤搜索引擎:百度 ⾕歌 360 雅⻁ 搜狗
优势:开放性 速度快
劣势:⽬标不明确
返回内容:基本上%90是⽤户不需要的
不清楚⽤户的需求在哪⾥


(2)聚焦爬⾍(学习)
⽬标明确
对⽤户的需求⾮常精准
返回的内容很固定
增量式:翻⻚:从第⼀⻚请求到最后⼀⻚

(3)Deep 深度爬⾍:

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

robots:是否允许其他爬⾍(通⽤爬⾍)爬取某些内容
聚焦爬⾍不遵守robots
爬⾍和反爬做⽃争:资源对等 胜利的永远是爬⾍

5、爬⾍的⼯作原理:
(1)确认你抓取⽬标的url是哪⼀个(找)
(2)使⽤python代码发送请求获取数据(java Go)
(3)解析获取到的数据(精确数据),找到新的⽬标(url)回到第⼀步(⾃动化)
(4)数据持久化

6、python3(原⽣提供的模块):urlib.rquest:


(1)、urlopen :
1)、返回response对象
2)、response.read()
3)、bytes.decode("utf-8")


(2)get:传参
汉字报错 :解释器ascii没有汉字,url汉字转码


(3)post


(4)handle处理器的⾃定义


(5)urlError


7、python(原⽣提供的):urlib2

接下来将的知识点:
request(第三⽅)
数据解析:xpath bs4
数据存储

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(str_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()

 

 

;