爬虫学习记录-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’
结语
本节完毕,下文待续。