目标:做一个小爬虫项目

2017年6月4日13:32:17       mooc网教程
Python爬虫入门一之综述
要学习Python爬虫,我们要学习的共有以下几点:
Python基础知识
Python中urllib和urllib2库的用法
Python正则表达式
Python爬虫框架Scrapy
Python爬虫更高级的功能
1.Python基础学习
1) 慕课网Python教程
2) 廖雪峰Python教程
3) 简明Python教程
4) 汪海的实验室
2.Python urllib和urllib2 库的用法
3.Python 正则表达式
4.爬虫框架Scrapy
---------------------分割线--------------
慕课网python教程
第一章 课程介绍
1-1 Python入门课程介绍 (04:16)
第二章 安装python
2-1 选择Python版本 (00:51)
2-2 Windows上安装Python (02:22)
2-3 第一个Python程序 (02:33)
第3章 Python变量和数据类型
3-1 Python中数据类型
3-2 Python之print语句
3-3 Python的注释
3-4 Python中什么是变量
3-5 Python中定义字符串
3-6 Python中raw字符串与多行字符串
3-7 Python中Unicode字符串
3-8 Python中整数和浮点数
3-9 Python中布尔类型
笔记:
1.\n 表示换行
\t 表示一个制表符
\\ 表示 \ 字符本身
2."I'm OK" 输出:I‘m OK
'Learn "Python" in imooc' 输出:Learn "Python" in imooc
3.如果要表示多行字符串,可以用'''...'''表示:
4.如果一个字符串包含很多需要转义的字符,对每一个字符都进行转义会很麻烦。
为了避免这种情况,我们可以在字符串前面加个前缀 r ,表示这是一个 raw 字符串,里面的字符就不需要转义了。
5.如果中文字符串在Python环境下遇到 UnicodeDecodeError,这是因为.py文件保存的格式有问题。可以在第一行添加注释:# -*- coding: utf-8 -*-
目的是告诉Python解释器,用UTF-8编码读取源代码。然后用Notepad++ 另存为... 并选择UTF-8格式保存。
6.11 / 4 # ==> 2
令很多初学者惊讶的是,Python的整数除法,即使除不尽,结果仍然是整数,余数直接被扔掉。
7.1. 在计算 a and b 时,如果 a 是 False,则根据与运算法则,整个结果必定为 False,因此返回 a;
如果 a 是 True,则整个计算结果必定取决与 b,因此返回 b。
2. 在计算 a or b 时,如果 a 是 True,则根据或运算法则,整个计算结果必定为 True,因此返回 a;
如果 a 是 False,则整个计算结果必定取决于 b,因此返回 b。
第4章 List和Tuple类型
4-1 Python创建list
4-2 Python按照索引访问list
4-3 Python之倒序访问list
4-4 Python之添加新元素
4-5 Python从list删除元素
4-6 Python中替换元素
4-7 Python之创建tuple
4-8 Python之创建单元素tuple
4-9 Python之“可变”的tuple
笔记:
1.Python内置的一种数据类型是列表:list。list是一种有序的集合,可以随时添加和删除其中的元素。
2.Python是动态语言,所以list中包含的元素并不要求都必须是同一种数据类型,我们完全可以在list中包含各种数据:
3.由于list是一个有序集合,访问其中的元素:正序和倒序,通过索引下标的方式进行访问。和数组类似。
4.Python之添加新元素
第一个办法是用 list 的 append() 方法,把新同学追加到 list 的末尾:
方法是用list的 insert()方法,它接受两个参数,第一个参数是索引号,第二个参数是待添加的新元素:
5.Python从list删除元素
pop()方法总是删掉list的最后一个元素,并且它还返回这个元素,所以我们执行 L.pop() 后,会打印出 'Paul'。
6.tuple是另一种有序的列表,中文翻译为“ 元组 ”。tuple 和 list 非常类似,但是,tuple一旦创建完毕,就不能修改了。
7.创建tuple和创建list唯一不同之处是用( )替代了[ ]。
总结:
list中的内容是可变的;tuple中的内容是不可变的,一旦创建不可修改;tuple中可以有list;
---------------------分割线-----------------
第5章 条件判断和循环
5-1 Python之if语句
5-2 Python之 if-else
5-3 Python之 if-elif-else
5-4 Python之 for循环
5-5 Python之 while循环
5-6 Python之 break退出循环
5-7 Python之 continue继续循环
5-8 Python之 多重循环
笔记:
1.计算机之所以能做很多自动化的任务,因为它可以自己做条件判断。
2. Python代码的缩进规则。具有相同缩进的代码被视为代码块,上面的3,4行 print 语句就构成一个代码块(但不包括第5行的print)。
如果 if 语句判断为 True,就会执行这个代码块。
缩进请严格按照Python的习惯写法:4个空格,不要使用Tab,更不要混合Tab和空格,否则很容易造成因为缩进引起的语法错误。
注意: if 语句后接表达式,然后用:表示代码块开始。
如果你在Python交互环境下敲代码,还要特别留意缩进,并且退出缩进需要多敲一行回车:
3.if....else....案例
if age >= 18:
print 'adult'
else:
print 'teenager'
4.list或tuple可以表示一个有序集合。如果我们想依次访问一个list中的每一个元素呢?通过for循环来访问,Python的 for 循环就可以依次把list或tuple的每个元素迭代出来:
5.L = ['Adam', 'Lisa', 'Bart']
for name in L:
print name
注意: name 这个变量是在 for 循环中定义的,意思是,依次取出list中的每一个元素,并把元素赋值给 name,然后执行for循环体(就是缩进的代码块)。
6.小总结:注意for循环的格式
7.和 for 循环不同的另一种循环是 while 循环,while 循环不会迭代 list 或 tuple 的元素,而是根据表达式判断循环是否结束。
8.while案例
比如要从 0 开始打印不大于 N 的整数:

N = 10
x = 0
while x < N:
print x
x = x + 1
while循环每次先判断 x < N,如果为True,则执行循环体的代码块,否则,退出循环。

在循环体内,x = x + 1 会让 x 不断增加,最终因为 x < N 不成立而退出循环。

如果没有这一个语句,while循环在判断 x < N 时总是为True,就会无限循环下去,变成死循环,所以要特别留意while循环的退出条件。
9.用 for 循环或者 while 循环时,如果要在循环体内直接退出循环,可以使用 break 语句。
10.在循环过程中,可以用break退出当前循环,还可以用continue跳过后续循环代码,继续下一次循环。
1.Python之 多重循环
在循环内部,还可以嵌套循环,我们来看一个例子:
for x in ['A', 'B', 'C']:
for y in ['1', '2', '3']:
print x + y
x 每循环一次,y 就会循环 3 次,这样,我们可以打印出一个全排列:
A1
A2
A3
B1
B2
B3
C1
C2
C3
-------------------------------分割线------------------------------
第6章 Dict和Set类型
6-1 Python之什么是dict
6-2 Python之访问dict
6-3 Python中dict的特点
6-4 Python更新dict
6-5 Python之 遍历dict
6-6 Python中什么是set
6-7 Python之 访问set
6-8 Python之 set的特点
6-9 Python之 遍历set
6-10 Python之 更新set
笔记:
1.list 和 tuple 可以用来表示顺序集合
2.d = {
'Adam': 95,
'Lisa': 85,
'Bart': 59
} 这是一个字典也就是dict
3.可以简单地使用 d[key] 的形式来查找对应的 value,这和 list 很像,不同之处是,list 必须使用索引返回对应的元素,而dict使用key:
4.dict的第一个特点是查找速度快,无论dict有10个元素还是10万个元素,查找速度都一样。而list的查找速度随着元素增加而逐渐下降。
不过dict的查找速度快不是没有代价的,dict的缺点是占用内存大,还会浪费很多内容,list正好相反,占用内存小,但是查找速度慢。
由于dict是按 key 查找,所以,在一个dict中,key不能重复。
dict的第二个特点就是存储的key-value序对是没有顺序的!这和list不一样:
5.dict是可变的,也就是说,我们可以随时往dict中添加新的 key-value。
6.由于dict也是一个集合,所以,遍历dict和遍历list类似,都可以通过 for 循环实现。
7.通过 key 可以获取对应的 value,因此,在循环体内,可以获取到value的值。

--------------------------------分割线---------------------------------------------------------------------------

2017年6月4日21:08:34

1.dict的作用是建立一组 key 和一组 value 的映射关系,dict的key是不能重复的。
2.set 持有一系列元素,这一点和 list 很像,但是set的元素没有重复,而且是无序的,这点和 dict 的 key很像。
3.因为set不能包含重复的元素,所以,当我们传入包含重复元素的 list 会怎么样呢?会去掉重复的元素。set其实就是数学中的集合。
4.由于set存储的是无序集合,所以我们没法通过索引来访问。
5.访问 set中的某个元素实际上就是判断一个元素是否在set中。
6.set的内部结构和dict很像,唯一区别是不存储value,因此,判断一个元素是否在set中速度很快。
set存储的元素和dict的key类似,必须是不变对象,因此,任何可变对象是不能放入set中的。
set存储的元素也是没有顺序的。
7.由于 set 也是一个集合,所以,遍历 set 和遍历 list 类似,都可以通过 for 循环实现。
8.由于set存储的是一组不重复的无序元素,因此,更新set主要做两件事:
一是把新的元素添加到set中,二是把已有元素从set中删除。
添加元素时,用set的add()方法:
9.删除set中的元素时,用set的remove()方法:
-----------------分割线--------------------
第7章 函数
7-1 Python之什么是函数
7-2 Python之调用函数
7-3 Python之编写函数
7-4 Python函数之返回多值
7-5 Python之递归函数
7-6 Python之定义默认参数
7-7 Python之定义可变参数
笔记:
1.函数就是最基本的一种代码抽象的方式。
2.抽象是数学中非常常见的概念。
3.要调用一个函数,需要知道函数的名称和参数,比如求绝对值的函数 abs,它接收一个参数。
4.比较函数 cmp(x, y) 就需要两个参数,如果 x<y,返回 -1,如果 x==y,返回 0,如果 x>y,返回 1:
5.Python内置的常用函数还包括数据类型转换函数,比如 int()函数可以把其他数据类型转换为整数:
6.str()函数把其他类型转换成 str:
7.在Python中,定义一个函数要使用 def 语句,依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用 return 语句返回。
8.函数体内部的语句在执行时,一旦执行到return时,函数就执行完毕,并将结果返回。因此,函数内部通过条件判断和循环可以实现非常复杂的逻辑。
9.for 循环可以取出list中每个元素。
10.Python的函数返回多值其实就是返回一个tuple
1.在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。
2.递归函数的优点是定义简单,逻辑清晰。理论上,所有的递归函数都可以写成循环的方式,但循环的逻辑不如递归清晰。
3.使用递归函数需要注意防止栈溢出。在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。
由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出。可以试试计算 fact(10000)。
4.int()函数的第二个参数是转换进制,如果不传,默认是十进制 (base=10),如果传了,就用传入的参数。
5.Python之定义默认参数,就是给参数一个默认的值。直接用就行。
6.如果想让一个函数能接受任意个参数,我们就可以定义一个可变参数:
7.可变参数的名字前面有个 * 号,我们可以传入0个、1个或多个参数给可变参数:
------------------------分割线--------------------------
第8章 切片
8-1 对list进行切片
8-2 倒序切片
8-3 对字符串切片
笔记:
1.L[0:3]表示,从索引0开始取,直到索引3为止,但不包括索引3。即索引0,1,2,正好是3个元素。
2.L[:]实际上复制出了一个新list。
3.切片操作还可以指定第三个参数:
L[::2]
['Adam', 'Bart']
第三个参数表示每N个取一个,上面的 L[::2] 会每两个元素取出一个来,也就是隔一个取一个。
把list换成tuple,切片操作完全相同,只是切片的结果也变成了tuple。
4.对于list,既然Python支持L[-1]取倒数第一个元素,那么它同样支持倒数切片
5.在很多编程语言中,针对字符串提供了很多各种截取函数,其实目的就是对字符串切片。Python没有针对字符串的截取函数,只需要切片一个操作就可以完成,非常简单。
-------------------分割线-------------------------------------
第9章 迭代
9-1 什么是迭代
9-2 索引迭代
9-3 迭代dict的value
9-4 迭代dict的key和value
笔记:
1.在Python中,如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们成为迭代(Iteration)。
2.迭代操作就是对于一个集合,无论该集合是有序还是无序,我们用 for 循环总是可以依次取出集合的每一个元素。
3.集合是指包含一组元素的数据结构,我们已经介绍的包括:
1. 有序集合:list,tuple,str和unicode;
2. 无序集合:set
3. 无序集合并且具有 key-value 对:dict
4.迭代是一个动词,它指的是一种操作,在Python中,就是 for 循环。
5.Python中,迭代永远是取出元素本身,而非元素的索引。
6.对于有序集合,元素确实是有索引的。有的时候,我们确实想在 for 循环中拿到索引,怎么办?
方法是使用 enumerate() 函数:
7.使用 enumerate() 函数,我们可以在for循环中同时绑定索引index和元素name。但是,这不是 enumerate() 的特殊语法。实际上,enumerate() 函数把:

['Adam', 'Lisa', 'Bart', 'Paul']
变成了类似:

[(0, 'Adam'), (1, 'Lisa'), (2, 'Bart'), (3, 'Paul')]
因此,迭代的每一个元素实际上是一个tuple:
8.可见,索引迭代也不是真的按索引访问,而是由 enumerate() 函数自动把每个元素变成 (index, element) 这样的tuple,再迭代,就同时获得了索引和元素本身。
9.dict对象本身就是可迭代对象,用 for 循环直接迭代 dict,可以每次拿到dict的一个key。
10.如果我们希望迭代 dict 对象的value,应该怎么做?
dict 对象有一个 values() 方法,这个方法把dict转换成一个包含所有value的list,这样,我们迭代的就是 dict的每一个 value:
1.那这两个方法有何不同之处呢?
1. values() 方法实际上把一个 dict 转换成了包含 value 的list。
2. 但是 itervalues() 方法不会转换,它会在迭代过程中依次从 dict 中取出 value,所以 itervalues() 方法比 values() 方法节省了生成 list 所需的内存。
3. 打印 itervalues() 发现它返回一个 <dictionary-valueiterator> 对象,这说明在Python中,for 循环可作用的迭代对象远不止 list,tuple,str,unicode,dict等,任何可迭代对象都可以作用于for循环,而内部如何迭代我们通常并不用关心。
如果一个对象说自己可迭代,那我们就直接用 for 循环去迭代它,可见,迭代是一种抽象的数据操作,它不对迭代对象内部的数据有任何要求。
4.迭代dict的key和value
我们了解了如何迭代 dict 的key和value,那么,在一个 for 循环中,能否同时迭代 key和value?答案是肯定的。
可以看到,items() 方法把dict对象转换成了包含tuple的list,我们对这个list进行迭代,可以同时获得key和value:

>>> for key, value in d.items():
... print key, ':', value
...
Lisa : 85
Adam : 95
Bart : 59
和 values() 有一个 itervalues() 类似, items() 也有一个对应的 iteritems(),iteritems() 不把dict转换成list,而是在迭代过程中不断给出 tuple,所以, iteritems() 不占用额外的内存。
-------------------分割线--------------------
第10章 列表生成式
10-1 生成列表
10-2 复杂表达式
10-3 条件过滤
10-4 多层表达式
笔记:
1.复杂表达式:就是使用for循环的迭代不仅可以迭代普通的list,还可以迭代dict。
2.列表生成式的 for 循环后面还可以加上 if 判断。
------------------------分割线----------------------------已经学完基本教程

python爬虫学习研究的更多相关文章

  1. python爬虫学习(1) —— 从urllib说起

    0. 前言 如果你从来没有接触过爬虫,刚开始的时候可能会有些许吃力 因为我不会从头到尾把所有知识点都说一遍,很多文章主要是记录我自己写的一些爬虫 所以建议先学习一下cuiqingcai大神的 Pyth ...

  2. python爬虫学习 —— 总目录

    开篇 作为一个C党,接触python之后学习了爬虫. 和AC算法题的快感类似,从网络上爬取各种数据也很有意思. 准备写一系列文章,整理一下学习历程,也给后来者提供一点便利. 我是目录 听说你叫爬虫 - ...

  3. Python爬虫学习:三、爬虫的基本操作流程

    本文是博主原创随笔,转载时请注明出处Maple2cat|Python爬虫学习:三.爬虫的基本操作与流程 一般我们使用Python爬虫都是希望实现一套完整的功能,如下: 1.爬虫目标数据.信息: 2.将 ...

  4. Python爬虫学习:四、headers和data的获取

    之前在学习爬虫时,偶尔会遇到一些问题是有些网站需要登录后才能爬取内容,有的网站会识别是否是由浏览器发出的请求. 一.headers的获取 就以博客园的首页为例:http://www.cnblogs.c ...

  5. Python爬虫学习:二、爬虫的初步尝试

    我使用的编辑器是IDLE,版本为Python2.7.11,Windows平台. 本文是博主原创随笔,转载时请注明出处Maple2cat|Python爬虫学习:二.爬虫的初步尝试 1.尝试抓取指定网页 ...

  6. 《Python爬虫学习系列教程》学习笔记

    http://cuiqingcai.com/1052.html 大家好哈,我呢最近在学习Python爬虫,感觉非常有意思,真的让生活可以方便很多.学习过程中我把一些学习的笔记总结下来,还记录了一些自己 ...

  7. python爬虫学习视频资料免费送,用起来非常666

    当我们浏览网页的时候,经常会看到像下面这些好看的图片,你是否想把这些图片保存下载下来. 我们最常规的做法就是通过鼠标右键,选择另存为.但有些图片点击鼠标右键的时候并没有另存为选项,或者你可以通过截图工 ...

  8. python爬虫学习笔记(一)——环境配置(windows系统)

    在进行python爬虫学习前,需要进行如下准备工作: python3+pip官方配置 1.Anaconda(推荐,包括python和相关库)   [推荐地址:清华镜像] https://mirrors ...

  9. [转]《Python爬虫学习系列教程》

    <Python爬虫学习系列教程>学习笔记 http://cuiqingcai.com/1052.html 大家好哈,我呢最近在学习Python爬虫,感觉非常有意思,真的让生活可以方便很多. ...

随机推荐

  1. RMAN BACKUP

    转自 RMAN BACKUP backup terminology Using the RMAN BACKUP Command to Create Backups Server-Managed Con ...

  2. espresso 元素遮挡问题。

    在使用espresso进行测试的时候,点击一个横向列表的时候会在点击的项目下出现对应的横线. 实现方式是在FrameLayout下放两个TextView, 一个TextView包含下划线,默认是Fra ...

  3. VMware Server中虚拟机随宿主机自动启动

    在options页面, 开启 Start Up and Shut Down Virtual Machines 这个选项. 保存退出. 打开 VMWare Server Console, 打开需要自动启 ...

  4. Tomcat7.0源代码分析——启动与停止服务原理

    前言 熟悉Tomcat的project师们.肯定都知道Tomcat是怎样启动与停止的. 对于startup.sh.startup.bat.shutdown.sh.shutdown.bat等脚本或者批处 ...

  5. hive on spark VS SparkSQL VS hive on tez

    http://blog.csdn.net/wtq1993/article/details/52435563 http://blog.csdn.net/yeruby/article/details/51 ...

  6. 数据库中存在0,1,2.....或者1,null,2 排序时让0或者null在最后的sql语句

     select * from yryz_products_t order by isnull(sort),sort;     select * from yourtable order by cast ...

  7. 倍福TwinCAT(贝福Beckhoff)基础教程5.1 TwinCAT-3 读写注册表

    读写注册表和读写文件一样,里面涉及的输入类型比较复杂,需要参考官方范例 sSubKey是指注册表的路径 sValName是指注册表要写入的名值对的名称 eValType是一个枚举类型(而且不是什么常规 ...

  8. JAVA Eclipse如何重新设置工作空间workspace

    窗口-首选项-常规-启动和关闭,勾选启动时提示工作空间,然后移除现有的工作空间,最好也勾选启动时刷新工作空间   重启之后就可以设置工作空间了  

  9. 通过Navicat for MySQL远程连接的时候报错mysql 1130 的解决方法

    用Navicat连接远程MYSQL,提示如下错误,我以为是自己的防火墙问题,但是关了,依然不行. ERROR 1130: Host '192.168.1.3' is not allowed to co ...

  10. 使用file_get_contents下载图片

        <?php /* 当你在搭建网站时,从远程服务器下载某张图片并且将其保存在自己的服务器上,这一操作会经常用到.代码如下: */ $image = file_get_contents('h ...