学爬虫遇到的问题-day01

今天开始从零学python3和爬虫,打算记录一下自己中间遇到的问题,也方便自己之后查找。

  • 网址问题
url = "https://www.baidu.com"

爬虫教程是18年的,使用的是http://www.baidu.com,但运行会报错,最后发现需要在http后加s,也尝试了一下知乎等其他网站,发现现在为了安全性应该是只能使用https了。

  • 将数据写入文件
response = urlopen(url)
info = response.read()
with open("baidu1.html","wb") as f:
    f.write(info)
response = urlopen(url)
info = response.read().decode()
with open("baidu1.html","w") as f:
    f.write(info)

这个是我自己试验后发现两种正确的写法,在写的过程中遇到过两种错误

  1. TypeError: write() argument must be str, not bytes
  2. UnicodeEncodeError: 'gbk' codec can't encode character '\u200b' in position 18782: illegal multibyte sequence

上述的两类错误都可以用上面的两种办法写,这里要解释一下字符串str和字节数组的bytes的关系(字节数组这个名字是我自己起的,只是为了好理解),字符串str可以理解为文本,用单引号或者双引号引用的那些基本都是。那么字节数组是个什么东西,字节数组是字符串用一种编码方式生成出来的东西,在python2里字符串和字符数组是可以互相混着来用的,但是python3做了区分,不能随便混了。

学爬虫遇到的问题-day01_第1张图片 两者的关系(图来自 https://blog.csdn.net/u012328476/article/details/25286543)

函数open中的w表示用文本写入,wb表示以二进制数据写入。read函数读取到的是字节数组,在不进行decode()解码的情况下是不能在open('w')中使用,因为字节数组和文本不能混着用,但如果在open('wb')中是可以直接用的。如果进行了decode(),那么就只能用open(‘w’)而不能用open('wb')。

你可能感兴趣的:(学爬虫遇到的问题-day01)