爬虫技术1——urllib

知识铺垫——保存网页

http

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

http的请求⽅式

get请求
  • 优点:⽐较便捷
  • 缺点:不安全:明⽂;参数的⻓度有限制
post请求
  • 优点:⽐较安全、数据整体没有限制、上传⽂件
put(不完全的)
delete(删除⼀些信息)

head(请求头)

发送⽹络请求(需要带⼀定的数据给服务器不带数据也可以)
请求头⾥⾯requestheader
返回数据:response
(1)Accept:⽂本的格式
(2)Accept-Encoding:编码格式
(3)Connection:⻓链接 短链接
(4)Cookie:验证⽤的
(5)Host:域名
(6)Referer:标志从哪个⻚⾯跳转过来的
(7)User-Agent:浏览器和⽤户的信息

请求信息
接上

爬虫的分类:

(1)通⽤爬⾍

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

(2)聚焦爬⾍(学习)

1.⽬标明确
2.对⽤户的需求⾮常精准
3.返回的内容很固定
增量式:翻⻚:从第⼀⻚请求到最后⼀⻚
Deep 深度爬⾍:静态数据:html css
动态数据:js代码,加密的js
robots:是否允许其他爬⾍(通⽤爬⾍)爬取某些内容
聚焦爬⾍不遵守robots
爬⾍和反扒做⽃争:资源对等 胜利的永远是爬⾍

爬虫的工作原理:

1.确认你抓取目标的url是哪⼀个(找)

2.使用python代码发送请求获取数据(类似java,Go)

3.解析获取到的数据(精确数据)

找到新的⽬标(url)回到第⼀步(⾃动化),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
python2(原⽣提供的):urlib2

#url_open_01
#保存百度首页
import urllib.request

def load_data():
    url="http://www.baidu.com"
    #get请求
    #http请求
    #response:http相应的对象
    response =urllib.request.urlopen(url)
    print(response)
    #读取内容
    data=response.read()
    #print(data)
    #将获取的内容转换为utf-8
    str_data=data.decode('utf-8')
    print(str_data)
    #数据持久化
    with open("baidu.html","w",encoding="utf-8") as f:
        f.write(str_data)
load_data()

#将字符串转化为二进制
str_name="baidu"
byte_name=str_name.encode()
print(byte_name)

#python爬取类型常为str或byte
#如果爬取回来的是字节类型,但写入的时候需要字符串
#使用decode("utf-8")    反之用encode("utf-8")
#get传参,param
#保存必应图片搜索
import urllib.request

import urllib.parse
import string

def get_method_params():
    url="http://cn.bing.com/images/search?q="
    
    #拼接字符串
    question="狮子"
    final_url="%s%s"%(url,question)
            #final_url =url +question
            #print(final_url)
    '''请求的网址里包含汉字,ascii中没有汉字
    将包含汉字的网址进行转译
    '''
    encode_new_url=urllib.parse.quote(final_url,safe=string.printable)
    #print(encode_new_url)
    ##  http://cn.bing.com/images/search?q=%E7%8B%AE%E5%AD%90

    response= urllib.request.urlopen(encode_new_url)
    #print(response)
    #UnicodeEncodeError: 'ascii' codec can't encode characters in position 21-22: ordinal not in range(128)
    #python:解释型语言,只支持ascii 0-127   也就是不支持中文,需要前面将网址转码
   
    print(response) 

    data=response.read().decode()
    print(data)

    #保存到本地
    with open("02_encode.html","w",encoding="utf-8") as f:
        f.write(data)

get_method_params()

接下来将的知识点:

5.request(第三⽅)

6.数据解析:xpath;bs4

7.数据存储

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值