“ Scrapy是一个适用爬取网站数据、提取结构性数据的应用程序框架,它可以应用在广泛领域:Scrapy 常应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。通常我们可以很简单的通过 Scrapy 框架实现一个爬虫,抓取指定网站的内容或图片。尽管Scrapy原本是设计用来屏幕抓取(更精确的说,是网络抓取),但它也可以用来访问API来提取数据。”
Scrapy的安装 && 部署
爬虫案例库
Body
—
安装
1、windows 安装
安装 Twisted 模块
下载地址:
https://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted
根据python版本下载对应版
笔者为python3.6
下载完成后,放置一个爬虫的工作目录(笔者任意新建的)
然后在对应的 cmd 打开,(什么是cmd笔者不多说)
推荐建立一个虚拟环境(非必须,但推荐)
算了,后面的上视频
pip install ./T......(Tab键)pip install scrapypip install pywin32
windows部署就是这么简单
2、Ubuntu 安装
前提是已经安装好python3 与 pip
1、安装依赖(来自:官方文档)
~$sudo apt-get install python3 python3-dev python-pip libxml2-dev libxslt1-dev zlib1g-dev libffi-dev libssl-dev
2、安装 Scrapy
~$sudo pip3 install scrapy
3、CentOS 安装
前提是已经安装好python3 与 pip
~$sudo pip3 install scrapy
部署
创建Scrapy项目
scrapy startproject Democd Demoscrapy genspider cb 'cloudbyte.club'
项目目录结构如图:
cb.py 编写代码逻辑
items.py 预设数据变量(可不使用)
middlewares.py 爬虫中间件(一般用不着)
pipelines.py 数据处理的地方
settins.py 全局配置
** 此下为笔者记录(笔者自己需要)
settings.py
USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36'ROBOTSTXT_OBEY = FalseLOG_LEVEL = 'WARNING'COOKIES_ENABLED = FalseDOWNLOAD_DELAY = 3ITEM_PIPELINES = { 'Demo.pipelines.DemoPipeline': 300,}
pipelines.py
import pymysql, timefrom pymongo import MongoClientclass DemoPipeline: def open_spider(self, spider): '''在爬虫开启的时候执行一次,仅执行一次''' self.start = time.time() # 连接数据库(地址,用户名,密码,名字) self.db = pymysql.connect("localhost", "root", "root", "book", charset="utf8") # 创建一个游标对象 self.cur = self.db.cursor() # 连接 MongoDB self.client = MongoClient(host="127.0.0.1", port=27017) self.collection = self.client[''][''] print('MySQL 连接成功!') print('MongonDB 连接成功!') self.i = 0 def close_spider(self, spider): '''在爬虫结束时执行一次''' # 关闭游标 self.cur.close() # 关闭数据库 self.db.close() print('\n' + '爬取完成!' + '耗时:', time.time() - self.start) def process_item(self, item, spider): self.i += 1 data_list = [(), ] data_dict = {} try: self.cur.executemany( "INSERT INTO () VALUES ()", data_list) self.db.commit() except Exception as e: self.db.rollback() print("MySQL 数据保存失败!") print(data_list) print(e) try: self.collection.insert(data_dict) except Exception as e: print("MongoDB数据保存失败!") print(data_dict) print(e) return item
案例库
https://github.com/huangsv/pythonSpider