1.安装scrapy框架
# pip install scrapy 直接安装即可
如果出错可以尝试先安装lxml: pip install lxml(已安装请忽略)
# 安装pyOpenSSL: pip install pyopenssl
# 安装Twisted : pip install twisted (如果安装失败,去官网下载wheel文件即可)
# 安装pyWin32: pip install pywin32
# 最后将scrapy所在目录配置到系统环境变量,
打开cmd,输入Scrapy出现以下则表示安装成功
2.创建Scrapy项目
在项目目录下打开命令窗口
输入:scrapy startproject xxx(项目名)即可产生scrapy的目录结构
'''
|-xxx(项目名)
|-scrapy.cfg # 配置文件
|-__init__.py
|-items.py # 定义好你所需要爬取的字段
|-middlewares.py # 理解为高级配置,一般不需要进行更改,如需配置代理池,随即更换 Agent等可在这里配置
|-pipelines.py # 异步事件驱动会将爬取的数据响应到管道,在这里实现数据的清洗,存储等
|-settings.py # 全局配置,可以理解为类似django等框架的Settings文件
|-spiders # 存放你的Spider文件,也就是你的爬虫文件
|-__init__.py
'''
3.示例:
# spiders.py
import scrapy
from baidunews.items import BaidunewsItem
from scrapy.http import Request
import re
import time
# 编写爬虫文件
class N1Spider(scrapy.Spider):
name = "n1" # 理解为唯一标识该项目,需要用到其启动项目
allowed_domains = ["baidu.com"] # 需要爬取的域名
# start_url为list,可存放多个url,遍历拿出即可
start_urls = ['http://news.baidu.com/widget? id=LocalHouseNews&ajax=json']
allid=['LocalHouseNews', 'LocalNews']
allurl=[]
# items.py
import scrapy
# 定义字段
class BaidunewsItem(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
title=scrapy.Field()
link=scrapy.Field()
content=scrapy.Field()
# sesstings.py
# Obey robots.txt rules
ROBOTSTXT_OBEY = False # 君子协议,尊不遵守看你自己
# piplines.py
# 在这里选择数据的处理方式,可以直接存储进数据库,下面示例以mongoDB作为演示
class BaidunewsPipeline(object):
def process_item(self, item, spider):
print(item["title"])
return item
# mongo存储示例
class CrawldataPipeline(object):
def __init__(self):
clients = pymongo.MongoClient('mongodb://')
mydb = clients["库名"]
self.mycol = mydb["集合名"] # Mongo中为集合,也就是表,有则连接,没有会自己创建一个集合
def process_item(self, item, spider):
data = dict(item)
title = data.get('title')
server = data.get('server')
mongo_info = {
"title": title,
"server": server,
}
try:
self.mycol.insert(mongo_info)
tem # 这里必须返回
except Exception:
pass
# ps:piplines管道可由多个,可设置优先级,在sesstings.py里面配置即可
4.一个爬虫项目就算完成了,但我们一般都会结合分布式,接下来描述的时Scrapy分布式的实现方式
ps:临时有事,会在后面补上