Python3 学习札记(二)

参考‘逆風的薔薇’的教程,《Python3爬虫》-伪装浏览器

关于fiddler等抓包工具的使用,这里不再赘述。

代码

'''
以自定义网页请求报头的形式伪装成浏览器向服务器发出请求
'''
import urllib.request

# import ssl
# ssl._create_default_https_context = ssl._create_unverified_context

def saveFile(data):
    path = r'E:\Python\VSCode_Python\CSDN\project\02_douban.out'
    f = open(path, 'wb')
    f.write(data)
    ''' 向磁盘写入数据,需要为bytes-like object,也即是utf-8编码的数据,经过encode处理即可得到
    如果是unicode编码的数据,则是str对象,无法写入 '''
    f.close()

url = 'https://www.douban.com/'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3141.7 Safari/537.36'}
# 浏览器一般用User-Agent来表明自己的身份

req = urllib.request.Request(url, headers = headers)  # 由于要自定义请求报头,因此必须实例化一个Request对象
# class urllib.request.Request(url, data=None, headers={}, origin_req_host=None, unverifiable=False, method=None)
# 可以看出url是一个必选参数,headers是一个默认参数,默认值是空{},因此在传递headers时必须制定其参数名称,否则会传递给data

res = urllib.request.urlopen(req)   # 打开一个具有headers的请求

data = res.read()

# data = data.decode()
# data = data.encode('utf-16')
# 以utf-16编码来存储,可以看到文件大了几乎一倍

saveFile(data)  # 保存的数据需要是utf-8编码,以节省内存

data = data.decode('utf-8') # 将utf-8编码的数据转换为unicode编码
'''
decode 解码,子编码(utf-8, utf-16, gbk)转换成父编码(unicode)
encode 编码,unicode转换成子编码
'''


print(data)
print(type(res))
print(res.geturl())
print(res.info())
print(res.getcode())

运行结果

程序运行结果如下:
这里写图片描述
生成的02_douban.out如下:
这里写图片描述

笔记

  • 伪装浏览器请求的关键是headers,其中浏览器以User-Agent来表明自身身份,可以通过fiddler抓包工具来获取。
  • 在实例化一个Request对象时需要注意相关参数的声明,headers是一个默认参数。可以参考官方文档urllib.request
  • 保存数据时需要注意编码,一般都以utf-8编码格式来存储,而打印时则一般解码为unicode,可以通过encode和decode来实现。
  • 关于编码部分的知识可以参考廖雪峰老师的教程字符串和编码
  • 在某次调试中,控制台报出了SSL未确认的问题,加入下面两行代码解决。可是在第二天再次调试的时候又没有此问题了,具体原因暂时不太清楚。【SSL和TLS协议不太清楚,,,以后慢慢学习】
    import ssl
    ssl._create_default_https_context = ssl._create_unverified_context
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值