今天开始学python 目标是编写出一套自己的网络爬虫框架
要说动力很大众化 废话不多说了
看了很多网上的资料 然而很多东西用的都是python 2.7 很多人还是劝使用python3来做
好吧 python3
问题1:网上的爬虫教程很多 但是都是2.7 这里推荐一下
http://cuiqingcai.com/927.html
但是所有的教程都是基于2.7的
所以还是按照3去学
问题2:英文不好 看不懂原版
这个真没辙 谁让小时候不好好学习呢
废话不多说了 开始第一天的学习
===========================================================================================
今天解决问题如下:
- 怎么下载python3
- 工具
- 到底怎么去学python
- urllib包
- 写一个get接口方法
1.怎么下载python3
下载python3 这个很多人百度一下都OK 但是 懵逼的是那么多连接到底怎么选择?
https://www.python.org/downloads/windows/
这是官网下载 可以看到最新的是3.6版本
点击3.6后 往下拉
本人是win7-64位系统 下载
Windows x86-64 executable installer | Windows | for AMD64/EM64T/x64, not Itanium processors | 71c9d30c1110abf7f80a428970ab8ec2 | 31505640 | SIG |
安装的时候 为了避免配置的尴尬,所以在安装的时候 一开始就有咨询是否配置到path 直接勾选 一路next
安装完毕 。运行cmd 输入 python 回车后 >>> 标志 配置成功 (其实啥都没干)
2.工具
很多时候学语言 都让txt走起,高级点的 editplus啥的 一定要走个编译过程。怎么说呢 哥们用这个方法学python 不下5遍了 最终都败给了懒惰 思来想去 IDE挺好 干嘛不直接用。很多人说 IDE快捷键太多 用多了 最后变成了快捷键 对于新手不好。我承认 你说的对 但是IDE省去了各种繁琐操作,你不用快捷键 一步一步去打代码 不就行了。。。有方便的为什么不去用。
IDE的选择 原来想用eclipse的 直接安装插件 但是失败了 失败的原因更令我无语。因为我安装的是python3.6 然而eclipse并不支持 这么新的版本。。果断放弃
所以选择IDE是pycharm-professional-2016.3.2 官网直接下载 版本自行选择
安装后,开始本人的第一个代码之旅
3.到底怎么去学python
很多人在学语言的时候 都在想先打基础 基础打好了 一切OK 啥叫基础:输入 输出 判断 循环 数组 oo思想。。。。。。。
好吧 哥们在此之前 对于这种学习方法 100%拥护 但是就是因为基础这东西 学着学着就没了兴趣 才发现自己离目标越来越远 好吧 既然有目的 所以 还是从目的的角度出发学习
所以在这里 本人直接pass里基本语言 直接由浅如深的学习爬虫技术
4.urllib包
基本上看到网上做爬虫都是使用urllib和urllib2包 好吧 不管怎么样 先用了再说
1)打开pycharm 百度一下怎么下载插件 File-Settings 里面有Project,打开后看到有Project Interpreter
2)输入urllib和urllib2 我去 好多啊。。。。没办法 谁让不懂呢 全部下载
3)导入包语句 也就是第一句代码
import urllib,urllib2
好吧 百度的大神们你们赢了 没有报错 往下走
5.编写get接口方法
百度后发现,需要调用requst方法 恩 写吧
= urllib.request.urlopen(url).read()
报错了 醉了 为啥是方法报错
百度后 发现 在python3中 urllib2和urllib已经2合一了,所以光导这两个包 是不够了 变换一下
urllib.request data = urllib.request.urlopen("http://www.baidu.com" ).read()
好长 不是oo思想。。。来吧 改动吧
urllib.request url = data = urllib.request.urlopen(url).read()
这样就行了 给大家解释一下:
url就不解释了 主要是存放 接口url地址的
urllib是Python标准库的一部分,包含urllib.request,urllib.error,urllib.parse,urlli.robotparser四个子模块,urlopen函数,用于打开一个URL:
- info():返回一个对象,表示远程服务器返回的头信息。
- getcode():返回Http状态码,如果是http请求,200表示请求成功完成;404表示网址未找到。
- geturl():返回请求的url地址。
read():返回内容
说白了就是将返回内容赋值给url这个变量
额外说一下 python的变量是不用写类型的 人家是自动默认类型
那么想在控制台看到 就需要输出语句
(data)
OK完事,运行看一下。。。结果这。。。。。。看不懂 居然不是html源码。。。看来是忽略了什么
但是www.baidu.com这几个英文还是看的懂得 但是没有看到 应该出现的百度一下这个按钮
很显然 没有显示中文 百度一下 转码
直接复制别人的文字了
Python中编码、解码与Unicode的联系
字符串在Python内部的表示是Unicode编码,因此,在做编码转换时,通常需要以Unicode作为中间编码,即先将其他编码的字符串解码(decode)成Unicode,再从Unicode编码(encode)成另一种编码。
Python中encode、decode的使用叙述
首先,encode是unicode转换成str;decode是str转换成unicode。
s.decode(‘...‘):运行都会出错。因为python 3中的str类型对象有点像Python 2中的unicode, 而decode是将str转为unicode编码,所以str仅有一个encode方法,调用这个方法后将产生一个编码后的byte类型的字符。
data拿到的肯定是字符串。so
data.decode(‘UTF-8‘) 后 在给data赋值
OK 在运行 完美。。。。。。
全部代码如下
urllib.request url = data = urllib.request.urlopen(url).read() data = data.decode()(data)
好几次了 为了给代码加注释 结果各种报错 所以 我把注释写到最后
第一行 导包
第二行 把URL地址 赋值给url这个变量 当然 你想叫什么都行
第三行 使用urllib.request.urlopen().read()这个方法来读取URL并读取返回内容 最终赋值给data这个变量
第四行 给data这个变量 附加utf-8转码
第五行 最终的输出
===========================================================
后记 本人才疏学浅 如有高手看到本文中的错误 希望能及时告诉我