python爬虫万能代码 网络爬虫软件有哪些


python爬虫万能代码 网络爬虫软件有哪些


在上一篇文章《神器!五分钟完成大型爬虫项目!》,我们介绍了一个类似于 Scrapy 的开源爬虫框架——feapder,并着重介绍了该框架的一种应用——AirSpider,它是一个轻量级的爬虫 。
接下来我们再来介绍另一种爬虫应用——Spider,它是是一款基于 redis 的分布式爬虫,适用于海量数据采集,支持断点续爬、爬虫报警、数据自动入库等功能 。
安装和 AirSpider 一样,我们也是通过命令行安装 。
由于 Spider 是分布式爬虫,可能涉及到多个爬虫,所以最好以项目的方式来创建 。
创建项目我们首先来创建项目:
feapder create -p spider-project
创建的项目目录是这样的:
创建好项目后,开发时我们需要将项目设置为工作区间,否则引入非同级目录下的文件时,编译器会报错 。
设置工作区间方式(以pycharm为例):项目->右键->Mark Directory as -> Sources Root 。
创建爬虫创建爬虫的命令行语句为:
feapder create -s
  • AirSpider 对应的 spider_type 值为 1
  • Spider 对应的 spider_type 值为 2
  • BatchSpider 对应的 spider_type 值为 3
默认 spider_type 值为 1 。
所以创建 Spider 的语句为:
feapder create -s spider_test 2
运行语句后,我们可以看到在 spiders 目录下生成了 spider_test.py 文件 。
对应的文件内容为:
import feapderclass SpiderTest(feapder.Spider):# 自定义数据库,若项目中有setting.py文件,此自定义可删除__custom_setting__ = dict(REDISDB_IP_PORTS="localhost:6379", REDISDB_USER_PASS="", REDISDB_DB=0)def start_requests(self):yield feapder.Request("https://www.baidu.com")def parse(self, request, response):print(response)if __name__ == "__main__":SpiderTest(redis_key="xxx:xxx").start()因Spider是基于redis做的分布式,因此模板代码默认给了redis的配置方式 。关于 Redis 的配置信息:
  • REDISDB_IP_PORTS:连接地址,若为集群或哨兵模式,多个连接地址用逗号分开,若为哨兵模式,需要加个REDISDB_SERVICE_NAME参数 。
  • REDISDB_USER_PASS:连接密码 。
  • REDISDB_DB:数据库 。
在 main 函数中,我们可以看到有个 redis_key 的参数,这个参数是redis中存储任务等信息的 key 前缀,如 redis_key=”feapder:spider_test”, 则redis中会生成如下:
特性我们在 AirSpider 里面讲的方法,在 Spider 这里都支持,下面我们来看看 Spider 相对于 AirSpider 的不同之处 。
数据自动入库写过爬虫的人都知道,如果要将数据持久化到 MySQL 数据库,如果碰到字段特别多的情况,就会很烦人,需要解析之后手写好多字段,拼凑 SQL 语句 。
这个问题,Spider 帮我们想到了,我们可以利用框架帮我们自动入库 。
建表第一步,我们需要在数据库中创建一张数据表,这个大家都会,这里就不说了 。
配置 setting将 setting.py 里面的数据库配置改为自己的配置:
# # MYSQLMYSQL_IP = ""MYSQL_PORT = MYSQL_DB = ""MYSQL_USER_NAME = ""MYSQL_USER_PASS = ""也就是这几个配置 。
生成实体类 Item接着,我们将命令行切换到我们项目的 items 目录,运行命令:
feapder create -i
我这里数据库里使用的是 report 表,所以命令为:
feapder create -i report
然后,我们就可以在 items 目录下看到生成的 report_item.py 实体类了 。我这里生成的实体类内容是:
from feapder import Itemclass ReportItem(Item):"""This class was generated by feapder.command: feapder create -i report."""__table_name__ = "report"def __init__(self, *args, **kwargs):self.count = Noneself.emRatingName = None# 评级名称self.emRatingValue = https://www.shwenmu.com/wenda/None# 评级代码self.encodeUrl = None# 链接# self.id = Noneself.indvInduCode = None# 行业代码self.indvInduName = None# 行业名称self.lastEmRatingName = None# 上次评级名称self.lastEmRatingValue = None# 上次评级代码self.orgCode = None# 机构代码self.orgName = None# 机构名称self.orgSName = None# 机构简称self.predictNextTwoYearEps = Noneself.predictNextTwoYearPe = Noneself.predictNextYearEps = Noneself.predictNextYearPe = Noneself.predictThisYearEps = Noneself.predictThisYearPe = Noneself.publishDate = None# 发表时间self.ratingChange = None# 评级变动self.researcher = None# 研究员self.stockCode = None# 股票代码self.stockName = None# 股票简称self.title = None# 报告名称

推荐阅读