Python学习笔记(八)爬虫基础(正则和编解码)
来源:互联网 发布:淘宝退款要多久 编辑:程序博客网 时间:2024/06/18 06:31
知识点
正则
正则匹配url,引用re库,将需要匹配的字段用(.*?)来匹配,可以匹配任何字符串。如果有换行,可以用如下方式解决:
1. ([\s\S]*?)
2. re.findall(reg,html,re.S)
re.S:’ . ‘并且包括换行符在内的任意字符(注意:’ . ‘不包括换行符)
其他re的主要函数:python正则表达式re常用方法
编解码
解码:将任意一种编码格式转换成unicode
编码:将unicode转换成其他编码格式
爬虫使用的是utf-8编码,有的网页是gbk或其他编码的。所以这类编解码的过程为:
gbk->unicode->utf-8
如果是utf-8转换成gbk,则:
uft-8->unicode->gbk
用代码来说为
#该html为gbk编码html = urllib.urlopen().read()#gbk转换成utf-8html4utf_8 = html.decode('gbk').encoding('utf-8')
为什么选用unicode坐中间转换的过程?
Unicode是国际组织制定的可以容纳世界上所有文字和符号的字符编码方案。可以看做编解码的万能中转站。
代码
#encoding=utf-8import urllibimport resort_dict = { 1:'玄幻魔法', 2:'武侠修真', 3:'纯爱耽美', 4:'都市言情', 5:'职场校园', 6:'穿越重生', 7:'历史军事', 8:'网游动漫', 9:'恐怖灵异', 10:'科幻小说', 11:'美文名著'}def getNovel(url): html = urllib.urlopen(url).read().decode('gbk').encode('utf-8') #获取书名 reg = r'<meta property="og:novel:book_name" content="(.*?)"/>' bookname=re.findall(reg,html)[0] #获取描述 reg = r'<meta property="og:description" content="(.*?)"/>' #或者re.findall(reg,html,re.S) 因为有换行符,正则不匹配了 #通过这种方式就可以匹配换行 description = re.findall(reg,html,re.S)[0] print bookname,descriptiondef getList(sort_id,sort_name): html = urllib.urlopen("http://www.quanshuwang.com/list/%s_1.html"%sort_id).read().decode('gbk').encode('utf-8') reg = r'<a target="_blank" href="(.*?)" class="l mr10">' urlList = re.findall(reg,html) for url in urlList: getNovel(url) #break #print urlListfor sort_id,sort_name in sort_dict.items(): getList(sort_id,sort_name) break
效果
阅读全文
0 0
- Python学习笔记(八)爬虫基础(正则和编解码)
- php【基础学习八】URL编解码
- 编解码学习笔记(八):Real系列
- 编解码学习笔记(八):Real系列
- 编解码学习笔记(十二):其他编解码
- 编解码学习笔记(十二):其他编解码
- 编解码学习笔记(十二):其他编解码
- 编解码学习笔记(十二):其他编解码
- python基础学习笔记(八)
- 编解码学习笔记(一):基本概念
- 编解码学习笔记(一):基本概念
- 编解码学习笔记(一):基本概念
- 编解码学习笔记(一):基本概念
- 编解码学习笔记(一):基本概念
- 编解码学习笔记(一):基本概念
- 编解码学习笔记(一):基本概念
- 编解码学习笔记(一):基本概念
- FFMPEG之视频编解码基础学习笔记
- Giraph中的分区数目计算
- 查找字符串
- 初识spring boot
- iOS学习笔记-125.SDWebImage1——基本使用
- oracle group by ,count,sum 函数 日常使用小知识
- Python学习笔记(八)爬虫基础(正则和编解码)
- Hadoop集群搭建
- VLC框架总结(一)VLC源码及各modules功能介绍
- C语言实现通过日期计算这是一年中的第几天
- QWtplot
- vertical-align无效解决方法
- 快速排序
- Spring事务隔离和事务传播
- Linux查找含有某字符串的所有文件