爬虫学习记录-01

使用python访问一个get类型的页面

实验环境

python 3.6

步骤-1

使用原生自带的 urllib 模块进行爬虫的开始

//导入模块urllib的request框架
import urllib.request

步骤-2

使用urlopen方法模拟用户打开网页,以www.baidu.com为例。

import urllib.request

def load_data():
	url = ("http://www.baidu.com")
	//http和https有不同的访问方式
	response = urllib.request.urlopen(url)
load_data()

如下图,可以看到返回了一个response对象
在这里插入图片描述

步骤-3

使用 read 方法读取返回的response对象

import urllib.request

def load_data():
	url = "http://www.baidu.com"
	response = urllib.request.urlopen(url)
	print(response)
	data = response.read()
	//此处的response是我自己取的参数名
	//response.read()实际上是urllib.request.urlopen(url).read()
	print(data)

loda_data()

如下图可以看到在返回一个response之后成功读取了response的数据,但是可以注意到在response数据的前面有 b’ 这意味这读取到的数据是 bytes 类型,也就是二进制数据流。
在这里插入图片描述

步骤-4

使用decode方法将二进制数据转码成 utf-8 格式

import urllib.request

def load_data():
	url = "http://www.baidu.com"
	response = urllib.request.urlopen(url)
	print(responce)
	data = response.read()
	print(data)
	str_data = data.decode("utf-8")
	print(str_data)

load_data()

可以看到三次的结果对比,最终获取到了想要的数据。
在这里插入图片描述

步骤-5

使用 with open 进行数据读写,保存获取的数据。

import urllib.request

def load_data():

	url = "http://www.baidu.com"
	response = urllib.request.urlopen(url)
	print(response)
	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)

load_data()

可以看到获取的数据依照给定的文件名baidu.html保存了下来。
在这里插入图片描述

在文件保存及数据类型中的一些小问题

1.“w” 与 “wb” 的区别

使用 “w” 时,写入的是字符串类型数据,在上文中 data 是bytes型数据,str_data 是字符串型数据。

//如果上文的输出这样写就会报错
with open("baidu.html","w",encoding="utf-8") as f:
	f.write(data)

如图:
在这里插入图片描述
-------------------------分隔------------------------

//那么这就意味着如果使用"wb"会得到正确结果
with open ("wb_baidu.html","wb")as f:
	f.write(data)

如下图
(wb_baidu.html与上一种方式得到的baidu.html是一样的文件,这里就不贴文件比较的结果图了)
在这里插入图片描述

2.保存结果的编码问题

在上一问题中可以发现 “w”“wb” 在使用过程当中出现了 encoding=“utf-8” 的差异,那么对应会有什么样的问题?

with open("baidu.html","wb",encoding="utf-8")as f:
	f.write(data)
	//上文中data是bytes类型

如图报错:ValueError:二进制模式不接受编码参数
在这里插入图片描述
----------分隔----------

with open("baidu.html","w")as f:
	f.write(str_data)
	//上文中str_data是str类型

如图报错:UnicodeEncodeError: ‘gbk’编解码器无法在位置29531:非法多字节序列中编码字符’\xbb’
在这里插入图片描述

结语

本节完毕,下文待续。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值