# mini_spider **Repository Path**: veyronc/mini_spider ## Basic Information - **Project Name**: mini_spider - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2018-05-03 - **Last Updated**: 2021-11-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # mini_spider #### 项目介绍 在调研过程中,经常需要对一些网站进行定向抓取。由于python包含各种强大的库,使用python做定向抓取比较简单。请使用python开发一个迷你定向抓取器mini_spider.py,实现对种子链接的抓取,并把URL长相符合特定pattern的网页保存到磁盘上。 程序运行: ``` python mini_spider.py -c spider.conf ``` 配置文件spider.conf: ``` [spider] url_list_file: ./urls ; 种子文件路径 output_directory: ./output ; 抓取结果存储目录 max_depth: 1 ; 最大抓取深度(种子为0级) crawl_interval: 1 ; 抓取间隔. 单位: 秒 crawl_timeout: 1 ; 抓取超时. 单位: 秒 target_url: .*.(htm|html)$ ; 需要存储的目标网页URL pattern(正则表达式) thread_count: 8 ; 抓取线程数 ``` 种子文件每行一条链接,例如: ``` http://www.baidu.com http://www.sina.com.cn ``` 要求和注意事项:需要支持命令行参数处理。具体包含: -h(帮助)、-v(版本)、-c(配置文件)单个网页抓取或解析失败,不能导致整个程序退出。需要在日志中记录下错误原因并继续。当程序完成所有抓取任务后,必须优雅退出。从HTML提取链接时需要处理相对路径和绝对路径。需要能够处理不同字符编码的网页(例如utf-8或gbk)。网页存储时每个网页单独存为一个文件,以URL为文件名。注意对URL中的特殊字符,需要做转义。要求支持多线程并行抓取。代码严格遵守百度python编码规范代码的可读性和可维护性好。注意模块、类、函数的设计和划分完成相应的单元测试和使用demo。你的demo必须可运行,单元测试有效而且通过注意控制抓取间隔和总量,避免对方网站封禁IP。 #### 软件架构 ``` |____config_load.py 该模块用于读取配置文件 |____crawl_queue_manage.py 该模块为需要抓取的所有url队列管理模块 |____crawl_thread.py 抓取线程函数 |____custom_argparse.py 该模块自定义解析命令行参数。 |____log 记录日志文件夹 | |____运行后在此产生各种日志记录文件 |____log.py 统一日志模块 |____mini_spider.py 主程序 |____output 保存网页文件夹 | |____运行后在此保存需要保存的网页 |____seedfile_load.py 该模块用于读取url种子文件 |____spider.conf 爬虫参数配置文件 |____url_table.py 保存已抓取的url的布隆过滤器,用于去重 |____urls 种子文件目录 | |____url_list.1.txt | |____url_list.txt |____webpage_parse.py 对抓取网页的解析 |____webpage_save.py 将网页保存到磁盘 |____test | |____test.py 单元测试模块 ```