初识爬虫

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

 

posted @ 2019-03-18 22:21  ^sun^  阅读(233)  评论(0编辑  收藏  举报