python
python作为一个脚本语言,还是可以很方便的处理一些日常需求。由于我不是专业的python研发人员,所以可能理解的不深,一般请夸下,都是将python作为一个工具语言来使用。这次文章主要是介绍下基本的东西,还有我一个小需求,爬 夜不语诡异档案的小说内容,然后做个小程序给我自己使用
1.安装和升级
一般linux系统和mac系统都会安装python,但是版本可能有些古老,所以我们可以安装较新的版本,而且可以和老版本共存。
几个简单的命令可以查看下python的版本和安装情况
首先,下载和编译python的安装包,我选择的是3.5.2版本
如果缺少什么库或者缺少make的话,自己安装吧
默认安装后,bash的python仍然是老的版本,可以自己建立软连接覆盖旧的的软链。但是如果以前的bin下的并不是软链的话,就需要注意了。尽量不要覆盖否则依赖python2的脚本将服务发使用了。例如:yum
2.第三方库的管理
python 安装时会默认安装pip工具。但是我们使用的是python3.5.2的pip/所以使用的使用需要带上绝对路径
然后就可以使用pip安装第三方的库了。安装库的位置一般是
TIP:
为了方便使用自己安装的python和pip可以建一个软链到bin下
小说爬虫脚本~
前言
由于我喜欢看,夜不语诡异档案小说,但是网上不太好,只在某个网站上有连载的,而且应该是手打的,所以我就想写个爬虫,把小说全部爬下来,弄个小程序来看。
由于没有用过python所以借鉴下了路远的博客的内容,万分感谢!
我要抓取的网站是隐藏起来。所以整个抓取的思路很简单。首先通过目录页获取所有小说章节的url地址,然后分别抓取每个章节的html内容,通过分析,转换,加载获取小说的内容,并分别保存到文本中就可以了,以后在弄个小程序的服务,加载到手机里就ok了。
使用到的python 库大概有正则表达,urllib,Beautiful Soup。基本就够用了 代码地址是传送带
抓取目录和章节
由于细节比较多,所以着重挑几个重点说下,其他的细节可以直接看我的代码
由于抓取的是网页,所以需要对页面内容进行解析,定位好章节内容的html标签,组织形式等等,然后使用Beautiful Soup进行内容的提取
获取章节内容
content即是整个html内容,通过soup的select的定位章节的内容节点,然后清洗一下数据格式和内容。
获取章节目录
获取章节目录的方式和章节的内容基本一样,需要对格式进行专门的处理。我这里主要是处理了下汉子的数子,还有格式等。章节的顺序也是按照节点的顺序作为判定的
控制小说章节版本
由于小说采取的是抓取模式,所以对于抓取小说的更新,上次抓取章节失败,章节标题不可控等众多等问题,比较琐碎。所以决定使用数据库存储上次抓取章节过程的设计。
表设计
由于是脚本,所以一切从简,怎么方便怎么来。
设计思路
简单来说就只有三个步骤!
抓取小说所有章节title和url地址信息
和数据库章节chapter数据对比,找出上次抓取章节失败和本次抓取更新的章节信息。
对本次需要抓取的章节信息进行抓取工作,同时持久化到数据库
第一个步骤 这步,需要存入小说基本信息,同时抓取出所有目前网站的章节目录(上面已经消息说过了)
对比数据库数据 这步是对版本进行控制的主要内容。根据抓取网页的最新章节信息,获取数据库存入的信息,如果本条章节不存在,则认为是新的章节信息,如果章节存在,但是章节状态不对,那么认为该章节为需要重新抓取的章节信息。整合这两部分的章节信息。
最后一步 根据上部整合的章节信息,进行抓取工作并存入数据库
具体内容可以看代码
整理抓取模版,通用抓取代码
后续中...
ISSUES
多线程操作数据库:pymysql.err.InterfaceError: (0, ”)
因为,pymysql的execute有独占锁机制,所以需要在多线程操作数据库的时候,对connection锁
'gbk' codec can't decode byte illegal multibyte sequence
一般调用decode()函数都是decode('gbk'),此时隐含的另一个参数是'strict',即出现解码错误即抛出UnicodeError错误;这里使用参数'ignore',即出现解码错误直接忽略,不抛出任何异常。实际上还可以设置为'replace',即对解码出错的地方进行替换。
领取专属 10元无门槛券
私享最新 技术干货