python知识点记录

1、在导入一个包的时候,Python 会根据目录只有包含一个叫做 __init__.py 的文件才会被认作是一个包,放一个空的 :file:__init__.py就可以了。

2、类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称, 按照惯例它的名称是 self,self代表的实例,self.__class__指向类。

3、类中以"__"开头定义的变量为私有变量;

4、pip升级:linux: pip2/3 install -U pip    windows: python2/3 -m pip install -U pip

5、xpath路径表达式:

 
6、json:对json模块的方法的注释:dump和dumps(从Python生成JSON),load和loads(解析JSON成Python的数据类型);dump和dumps的唯一区别是dump会生成一个类文件对象,dumps会生成字符串,同理load和loads分别解析类文件对象和字符串格式的JSON。

7、python调试默认为warnning级别,只有大于该级别的才生效,日志级别大小关系为:CRITICAL > ERROR > WARNING > INFO > DEBUG > NOTSET,当然也可以自己定义日志级别。使用教程

8、python连接mysql,ip地址填写"127.0.0.1",而不是"localhost",否则可能报错。

9、元组中只包含一个元素时,需要在元素后面添加逗号,eg:y = (1,)

10、数据结构的符号:[] - 列表、(a,a,a)或 a,a,a  - 元组 、{无键值对}或set() - 集合、{}或者{键值对} - 字典;

11、集合是一个无序不重复元素的集。基本功能包括关系测试和消除重复元素。

 


 安装:

1、python3安装的时候,需要如下依赖:

yum install openssl-devel -y           yum install zlib-devel -y

2、python3在安装make的时候,会提示:The necessary bits to build these optional modules were not found ,然后提示一些模块没有找到,解决方法 解决方法2

yum install bzip2-devel ncurses bsddb gdbm-devel sqlite-devel readline-devel

 


 

爬虫

一、python 自带的urlib2和urlib或者第三方模块requests 

这种方案适合简单的页面爬虫,比如爬取博客园推荐文章。

   urllib2和urllib是python自带模块可用来发送处理请求,虽然比较灵活但API易用性较差,所以一般都要进行二次封装,我曾经也进行过封装,最后发现自己封装出来的模块无限趋近于非常成熟的requests库,所以还是直接使用requests吧,当然requests只发送和接受请求,对于页面分析还要配合lxml或beautifulsoup等第三方库进行。高级点的爬虫不仅仅是发送和处理请求,还需要处理异常,请求速度控制等问题,这就需要我们写额外的代码去控制,当然我们可以自己写只是时间问题,但完全没有必要,接下来我会介绍第二种方案。

如果自己写的话,可以用自带的urllib2,也可以用requests,解析可以使用lxml,BeautifulSoup,实现动态解析,还有splinter等框架,还可以用threading模块实现多线程,或者使用协程框架gevent。

   二、scrapy框架  

scrapy是爬虫领取的佼佼者,目前我做的项目无论复杂与否,都采用scrapy进行,对于请求调度,异常处理都已经封装好了,而且有第三方的scrapy-redis还可以支持分布式,我们把关注点放在更重要的页面分析和规则编写上,代码可以参考我github上的例子。

scrapy抓取虎嗅网文章: https://github.com/world1234567/scrapy_for_huxiu

  三、python selenium

这种方式我称为终极必杀器,一般是实在没办法的时候才用,以前我在利用某家搜索引擎抓取文章时,该搜索引擎采用的比较高难度的反爬虫机制而且不断变化让人找不到规律,最典型的特点就是cookie会随机隐藏到某个页面js和图片中,解决方案就是模拟浏览器的行为加载所有js等静态资源文件,如果自己写个浏览器取解析太扯蛋了,如果chrome浏览器能开放接口,通过chrome的加载方式获取页面的内容就好了,这就是selenium了,selenium加上随机等待时间可以模拟出和人非常类似的操作行为,缺点就是速度较慢,但是一般爬虫对抓取速度要求不高,重要的是稳定性,这种方式对于抓取反爬虫机制做的好的大型网站比较适用。

总结,对于大部分爬虫需求直接用scrapy解决,如果解决不了再采用第一种或第三种方案,就这么简单。

 

posted on 2017-07-17 16:16  飞哥100  阅读(197)  评论(0)    收藏  举报

导航