Python笔记

python中的yield将function变成generator(一种iterator),用于多次调用生成一系列值(一次调用生成系列值中的一个)。yield作用类似于return,但只是放弃(yield)执行权,函数内部状态(变量和执行情况)保持不变。

参考:‘yield’ and Generators Explained

注:ruby中的yield类似拉环,拉出函数附带的block来执行。


若在.sh文件里执行python脚本报ImportError错,而在shell里直接执行没问题,要设置在.sh里export PYTHONPATH,如:

1
export PYTHONPATH=/usr/local/lib/python2.7/site-packages:$PYTHONPATH

Unicode

type()查看变量是’unicode‘还是’str’,unicode(str, 'utf-8')返回str的utf-8表示

注音字母的Unicode有两种等价形式

  • 标着注音的字母(即composed形式): 又分canonical的NFC和compatable的NFKC
  • 字母和注音(即decomposed形式): 又分canonical的NFD和compatable的NFKD

unicodedata库来normalize

1
2
3
4
5
6
7
8
# -*- coding: utf-8 -*-
import unicodedata

data = u'naïve café'
normal = unicodedata.normalize('NFKD', data).encode('ASCII', 'ignore')
print normal

# prints "naive cafe"

scrapy

  • recursively crawling a website with Python and Scrapy

  • 页面解析用pyquery(内部使用lxml)

  • 解析js:

    1
    2
    3
    4
    5
    from selenium import webdriver
    browser = webdriver.PhantomJS()
    browser.get(url)
    print browser.page_source
    browser.quit

  • downloader下载url,spider解析Item,pipeline对Item做后续处理

twisted