# webcrawler_practise **Repository Path**: JUMPutf-8/webcrawler_practise ## Basic Information - **Project Name**: webcrawler_practise - **Description**: 爬虫练习--爬取《斗破苍穹》全文 - **Primary Language**: Python - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2018-08-12 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 爬虫练习 #### 爬取目标 爬取[《斗破苍穹》](http://www.doupobook.com/doupo/)全文,约1624章,并将正文保存至 /doupo 目录下, #### 项目介绍 master分支为原生爬虫,基于Python3.5,使用requests、bs4库,使用python的多线程技术,提高爬虫效率 爬取主要分三步:首先抓取目标网页内容,其次对文档树进行解析,提取需要的内容,最后将内容保存至txt文件 为了降低函数的复杂性,便于代码的维护和方便他人阅读,我将抓取网页内容定义为 get() 函数并返回抓取内容,将文档树解析和 对txt文件的io操作定义为另一个函数,get() 函数的输出为其参数。为了提高爬取速度使用代理ip进行爬取。定义一个ConnectDB类, 该类包含 get_ip()save_ip()get_random_ip() 三个方法。前两个方法的作用是从ip网站爬取免费代理ip 并保存至redis中,爬取时通过调用 get_random_ip() 随机获取redis中的一个ip作为代理。选择redis作为ip池是因为redis是基于内存的 数据库,读写快,可以设置键值对的生存时间。 爬取时主要碰到的问题有: 1. 超时问题。刚开始使用多线程进行爬虫的时候未使用代理,导致使用同一ip频繁访问服务器遭拒绝。 2. 异常未处理。爬取前一百章进行测试的时候,由于代码中未对异常进行处理,导致程序一出错便中止,大大降低了爬取效率。 3. 线程的数量问题。在一定范围内,多线程爬虫线程的数量越多,爬取效率便越高,如何寻找这个范围的上限是我当前要解决的问题。 后续会抽空使用scrapy框架进行相同的操作,与原生爬虫进行对比 如条件允许,会将该项目做成分布式爬虫,与原生爬虫进行对比