# 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框架进行相同的操作,与原生爬虫进行对比
如条件允许,会将该项目做成分布式爬虫,与原生爬虫进行对比