- 框架简介
- 下载安装
- 运行效果图展示
- spider.py
- distspider.py
- multiworker.py
- insertmysql.py
- parser.py
- download.py
- color.py
- 反馈与建议
_ _ _
| | |_| | |
__| |_ __ ____ ____ _ __| | ___ _ __
/ _` | '_ \ / ___`| '_ \| |/ _` |/ _ \ '__|
| (_| | |_) |\___ ,| |_) | | (_| | __/ |
\__,_| .__/ \____/| .__/|_|\__,_|\___|_|
| | | |
|_| |_| Author: doupeng
dpspider:一个轻量级Web爬虫框架
1.支持打印日志颜色输出
2.支持是否使用代理下载,自动切换代理
3.支持自定义多线程数量
4.支持自定义多进程数量
5.强大的解析网页方法,解析想要的文本更快更准
6.支持Mysql数据库自动写入过程
7.支持redis数据库去重
8.加入小型分布式的概念,多台服务器共同完成下载任务
- requests >= 2.10
pip install requests
安装即可 - lxml >= 3.6
pip install lxml
安装 - 如果
lxml
安装失败,windows
系统点击这里下载合适的版本 - MySQL-python >= 1.2.3
pip install MySQL-python
安装 - 如果
MySQL-python
安装失败,windows
系统点击这里下载合适的版本 - redis>= 2.10
pip install redis
安装即可
redis
数据库windows
版- redis-64bit.zip
- redis-32bit.zip
mysql
数据库windows
版 点击这里进入官网下载
1.python setup.py install
2.pip install dpspider-x.x.x.tar.gz ( win | linux | macOS )
3.dpspider-x.x.x.win-amd64.exe ( windows可执行文件,双击安装)
xxx.tar.gz
最新版本- dpspider-2.1.12.tar.gz
xxx.exe
最新版本- dpspider-2.1.12.win-amd64.exe
- 点击查看 test
实例源码
1.master
2.worker
框架的主体,配置文件要继承的类
- self.listGetUrls : 最初的要爬取的列表页的所有GET链接
- self.listPostUrl : 最初需要爬取的列表页的POST链接
- self.postPages : 最初需要爬取的列表页的POST链接的所有页数
- self.postPageName : 最初需要爬取的列表页的POST链接的页数KEY的名字
- self.encoding : 网页的编码,两级可分别设置,默认均为UTF-8
- self.threadNum : 开启的线程数量,默认开启20个线程
- self.logFile : 如果有,将输出写入文件,没有就打印到控制台
- self.color : 打印是否带有颜色
- self.debug : 有四个等级,0 什么都不输出,1 只输出[Error],2 输出[Error]和[WARING],3 输出[Error],[WARING]和[INFO],4 全输出
- self.downloader 下载器的参数设置:
- self.useProxyMaxNum : 每个代理的连续使用的最大次数,当连续使用次数达到这个数字时,强制更换代理,防止代理被封,默认为10次
- self.proxyFilePath : 代理文件的路径,默认为当前路径下的 proxyList.txt 文件
- self.method : 请求方法,默认为 (GET,GET) 方法, 还有(POST,GET)
- self.proxyEnable : 是否使用代理,默认为 False
- 下面这些是请求时可能用到可选参数,相对常会用到的: data, headers, cookies, timeout
- self.params = None
- self.data = None
- self.json = None
- self.headers = None
- self.cookies = None
- self.files = None
- self.auth = None
- self.timeout = None
- self.allowRedirects = True
- self.verify = None
- self.stream = None
- self.cert = None
- self.IM mysql数据库的参数设置 :
- self.mysqlHost : 数据库的主机名,默认为本机 localhost
- self.mysqlUser : 数据库的用户名
- self.mysqlPassword : 数据库的密码
- self.mysqlDb : 数据库的库名
- self.mysqlTableName : 数据库库下的表名
- self.mysqlCharset : 默认编码为 UTF-8
- self.isMysqlFLF : 插入失败的sql语句日志,默认不生成insertMysqlFail.log文件
- self.isMysqlRLF : 违反mysql主键唯一约束条件,没有插入数据库的sql语句,相当于去重,默认不生成insertMysqlRepeat.log文件
- self.isInsertMysql : 是否连接数据库,测试抓取正常时启用,默认不连接数据库
- self.RD redis数据库的参数设置:
- self.isUseRedis : 是否使用redis数据库进行去重, 默认为 False
- self.redisKey : 如果使用redis去重,作为redis的一个key存储,value值为mysql的表名
- self.isRedisKeyUrl : 如果redisKey是详情页的url,url作为去重依据,默认值为True,则这个详情页会在第一层过滤,不会再下载,节约资源
- self.redisHost : 数据库的主机名,默认为本机 localhost
- self.redisPort : 数据库的端口号,默认为6379
- self.redisDb : redis数据库,默认为0
- self.redisPassword : 数据库的密码,默认为 None
- parseList(self,data,response)
通过data(是一个Parser类,可以看parser.py来了解这个类下的方法),response,解析的所有详情页的url添加到urls列表中
并返回列表urls
- parsePage(self,data,response)
通过data(是一个Parser类,可以看parser.py来了解这个类下的方法),response,解析的所有你想要的字段添加到jsonData字典中
并返回字典jsonData
{
colunm1:value1,
colunm2:value2,
...
}
spider.py使用的是多线程
distspider.py 是将下载任务交给 multiworker.py, 采用分布式多进程
所以就没有线程的设置 self.threadNum 多了下面三个成员
- self.serverHost : 服务器地址
- self.serverPort : 服务器端口号
- self.serverAuthkey : 密钥
distspider.py 的下载器,设置的参数如下(与 distspider 参数相对应)
processNum=4 进程数
serverHost='127.0.0.1' 服务器地址
serverAuthkey=''密钥
serverPort=5000 服务器端口号
logFile=None
color=True
debug=4
数据写入模块
如果数据插入失败会生成 insertMysqlFail.log
可以选择是否生成违反主键唯一约束条件的插入语句,即 insertMysqlRepeat.log
选择 xpath 和 re 相结合的解析方法,方法很强大
点击了解xpath
可以选择是否使用代理下载
代理不能使用会自动更新下一个代理,还可以设置每个代理最大连续使用次数
可选是否带有颜色打印,或者设置输出的级别
- 希望反馈您的宝贵意见、建议和使用中的BUG.
- GITHUP地址:窦朋 | doupengs
- 微信公众号:人生苦短遂学python
- 邮箱:doupeng1993@sina.com