知识点


正则

正则匹配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-8
html4utf_8 = html.decode('gbk').encoding('utf-8')

为什么选用unicode坐中间转换的过程?
Unicode是国际组织制定的可以容纳世界上所有文字和符号的字符编码方案。可以看做编解码的万能中转站。

代码


#encoding=utf-8import urllib
import 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

效果


Python学习笔记(八)爬虫基础(正则和编解码)相关推荐

  1. Python 学习笔记 D1(基础)

    Python 学习笔记 D1(基础) 1.注释 #一个注释 ''' 多行注释 ''' 2.运算符与C++相同:+,-,*,/,%,>,<,=,>=,<=,==,!= 与C++不 ...

  2. Python学习笔记 1.0 基础内容篇章

    Python学习笔记 1.0 基础内容篇章 注释 变量 一.定义变量 二.使用变量 bug和debug bug: Debug工具: 数据类型 认识数据类型 在定义数据类型时发生的错误: 数据类型的补表 ...

  3. Python学习教程:Python3内置模块之base64编解码方法小结

    Python学习教程:Python3内置模块之base64编解码方法小结 概述 Base64 是网络上最常见的用于传输 8Bit 字节码的编码方式之一,Base64 就是一种基于 64 个可打印字符来 ...

  4. Python学习笔记之入门基础

    课程链接:Python入门教程--基础阶段_哔哩哔哩_bilibili Python学习笔记 注释 单行注释: * 多行注释: 1.多行前面加# 2."""注释信息&qu ...

  5. Python学习笔记(八)

    Python基础总结 Python基础总结 Python简介 Python是一种解释型.面向对象.动态数据类型的高级程序设计语言.目前分为Python2.X和Python3.X两个版本,且Python ...

  6. python学习笔记之爬虫框架scrapy(十七)

    一.安装 执行以下命令安装scrapy pip install scrapy 注意: Scrapy是用纯Python编写的,并且依赖于一些关键的Python包(以及其他一些包): lxml,高效的XM ...

  7. 爬虫实战学习笔记_1 爬虫基础+HTTP原理

    1 爬虫简介 网络爬虫(又被称作网络蜘蛛.网络机器人,在某些社区中也经常被称为网页追逐者)可以按照指定的规则(网络爬虫的算法)自动浏览或抓取网络中的信息. 1.1 Web网页存在方式 表层网页指的是不 ...

  8. 【懒懒的Python学习笔记八】

    面向对象编程是最有效的编程方法之一,在面向对象编程中,你编写表示现实世界中事物和情景的类,并基于这些类来创建对象.使用类来创建对象被称为实例化. 创建和使用类 使用类可以模拟任何东西.下面的实例编写一 ...

  9. 潭州教育学python_潭州教育-Python学习笔记6@函数基础,必备参数,位置参数,可选参数...

    6.1 函数定义: def BiJiao(a,b): #驼峰规则(首字母大写),见名知意-函数名大写 if a>b: print(a) elif a==b : print('xiangdeng' ...

最新文章

  1. rocketmq同步发送超时时间_RocketMQ系列(一)基本概念
  2. C# 加密解密(DES,3DES,MD5,Base64) 类
  3. 依赖包的添加和自动检测机制
  4. PowerShell批量修改邮箱配额和已删除保留期
  5. 20佳带给你灵感的优秀个人博客设计案例
  6. 为什么a*算法采用哈密尔顿距离作为启发函数比不在位数为启发函数的性能要好?_KDD2019: 使用神经网络为A*搜索算法赋能 --以个性化路径推荐为例...
  7. 四川教育考试网全国计算机,四川教育考试院
  8. 计算机丢失lua51dll怎么修复,lua51.dll
  9. 黑色沙漠手游台服最新服务器,黑色沙漠手游台服3月10日更新内容
  10. SpringBoot测试:pom文件版本重复和不一致导致的问题xxxConfigurationPropertySource和Assert.state(ZLjava/util/function/Supp
  11. info There appears to be trouble with your network connection. Retrying
  12. 图片择优算法(模糊图片筛选出最清楚的图片) 没有使用第三方库
  13. SQL--打折日期交叉问题
  14. SSL2895 购买干草
  15. widget安卓桌面插件初步使用
  16. 将word文档中的图片批量导出到文件夹中的办法
  17. 写代码时尽量少用复制粘贴(ctrl+c, ctrl+v)
  18. mybatis-plus中and和or的使用
  19. 考研高数常遇到奇函数偶函数,怎么去判定(定积分/二重积分中奇偶性判断)?
  20. 论文阅读:Fast Optical Flow using Dense Inverse Search

热门文章

  1. 房子并发什么意思_周公解梦:梦见建房子是什么意思
  2. alin42490怎样解除_我们应该如何思维42490
  3. 你告诉我,读书没有用
  4. 2021全国大学生数学建模竞赛A题思路
  5. AJAX技术简介及入门实例[收藏]
  6. 用python实现简版区块链-地址
  7. python中http协议编程_python网络编程、套接字、HTTP协议
  8. 从海尔工业平台数字化案例看产业生态平台的几点分享
  9. 计算机技术在医学应用中的论文,浅论计算机技术在医学中的应用.pdf
  10. Speedoffice(PPT)如何做动画演示效果