博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python极客学习笔记
阅读量:6998 次
发布时间:2019-06-27

本文共 2891 字,大约阅读时间需要 9 分钟。

  hot3.png

1. 正则

import res = '12abc33arr'print re.match(r'2.', s)   # 从字符开头匹配,匹配不到返回Noneprint re.search(r'2.', s)#匹配到内容就取消接下来的字符匹配,到字符结束没匹配到就返回None#以上两个匹配到就返回对象,用groups()可以获取匹配到的内容列表,但是只有在正则括号里面匹配到的内容才会存储为结果#例如:以上的正则,打印是空的,要想有,必须  re.search(r'2(.)', s)print re.findall(r'2.', s)#完全匹配字符,返回匹配到的结果列表,有括号就存储匹配到的括号里的结果,没括号就存储整个正则匹配到的结果print re.sub(r'a\w', 'a9', s) #正则替换,但不支持php里面的\\1,指定匹配到的第几个结果

修正符的使用:

print re.findall(r'2.', s, re.I)# re.I 忽略大小写# re.S .匹配换行符 (正常情况下不匹配换行符号)# re.L 表示特殊字符集\w, \W, \b, \B, \s, \S 依赖于当前环境# re.M 多行模式# re.U 表示特殊字符集\w, \W, \b, \B, \d, \D, \s, \S 依赖于Unicode 字符属性数据库# re.X 为了增加可读性,忽略空格和‟ # ‟后面的注释

非贪婪匹配的用法:

import res = '12abc33arr'print re.findall(r'a\w+', s)#result: ['abc13arr'] #其实我是想要 + 匹配一个就停止这次匹配,然后再重新匹配后面的print re.findall(r'a\w+?', s)#result: ['ab', 'ar']

特殊正则表达式

\d 代表数字 [0-9]\D 非数字 [^0-9]\w 字母或者数字 [0-9a-zA-Z]\W 非字母数字 [^0-9a-zA-Z]

2. requests的用法(urllib2的完美替代)

安装:

(1)用pip install requests(不用easy_install,不能卸载,如果卸载需要删源码)

(2)对于需要翻墙的模块安装。

        打开网站 

        下载对应的包。把.whl后缀重命名为.zip,解压。取出里面的requests文件夹(还有另外一个暂时没用的),放入python安装目录的c:\python2\lib文件夹内

import requestshea = {'User-Agent':'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36'}html = requests.get(url, headers = hea)  # get 方法提交html.encoding = 'utf-8'  #设置文本编码#post方法html = requests.post(url, headers = hea, data = {'action':'delete', 'm':'bbb'})  # get 方法提交

3. 反采集的方法。

(1) 网站会检查访问有没有ua头,没有返回403.

4. xpath和beautifulSoup的区别。

BeautifulSoup是一个库,而XPath是一种技术,python中最常用的XPath库是lxml,因此,这里就拿lxml来和BeautifulSoup做比较吧

(1)  性能 lxml >> BeautifulSoup
BeautifulSoup和lxml的原理不一样,BeautifulSoup是基于DOM的,会载入整个文档,解析整个DOM树,因此时间和内存开销都会大很多。而lxml只会局部遍历,另外lxml是用c写的,而BeautifulSoup是用python写的,因此性能方面自然会差很多。
(2) 易用性  BeautifulSoup >> lxml
BeautifulSoup用起来比较简单,API非常人性化,支持css选择器。lxml的XPath写起来麻烦,开发效率不如BeautifulSoup。

title = soup.select('.content div.title h3')

同样的代码用Xpath写起来会很麻烦

title = tree.xpath("//*[@class='content']/div[@class='content']/h3")

(3)  总结
需求比较确定,要求性能的场合用lxml,快速开发用BeautifulSoup

5. 多线程和单线程的时间比较。

# -*- coding: utf-8 -*-__author__ = 'Miracle'import requestsimport timefrom multiprocessing.dummy import Pool as ThreadPooldef getPageUrl():    url_list = []    for n in range(1, 21):        url_list.append('http://tieba.baidu.com/p/3522395718?pn=' + str(n))    return url_listurls = getPageUrl()def sendRequsts(urllist):    for url in urllist:        requests.get(url)        print urldef sendRequsts2(url):    requests.get(url)    print urltime1 = time.time()sendRequsts(urls)time2 = time.time() - time1print "单线程花费时间:%f" %time2pool = ThreadPool(4)  # 电脑是4核的配置time3 = time.time()aa = pool.map(sendRequsts2, urls)pool.close()pool.join()time4 = time.time() - time3print "多线程花费时间:%f" %time4

6. MySQLdb的bug:

mysqldb在连接到db,获取到游标以后,如果sql的执行时间过长,超过mysql的connect_timeout时,就会断掉。但是它不会重新连接,所以再次操作的时候就会报错。torndb模块可以避免这种问题。

7. vim的使用。

vundle 管理插件的插件

转载于:https://my.oschina.net/shyl/blog/649363

你可能感兴趣的文章