python爬虫

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',即对解码出错的地方进行替换。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180816G0Q2WB00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券