一、安装scrapy所依赖的库
1、安装wheel
pip install wheel
2、安装lxml
https://pypi.python.org/pypi/lxml/4.1.0
3、安装pyopenssl
https://pypi.python.org/pypi/pyOpenSSL/17.5.0
4、安装Twisted
https://www.lfd.uci.edu/~gohlke/pythonlibs/
5、安装pywin32
https://sourceforge.net/projects/pywin32/files/
6、安装scrapy
pip install scrapy
二、爬虫举例
1、创建项目
scrapy startproject zhihu
2、创建spider项目程序
cd zhihu
scrapy genspider zhihuspider www.zhihu.com
3、自动创建目录及文件
4、生成的爬虫具有基本的结构,我们可以直接在此基础上编写代码
# -*- coding: utf-8 -*-
import scrapy
class ZhihuSpider(scrapy.Spider):
name = "zhihuspider"
allowed_domains = ["zhihu.com"]
start_urls = ['http://www.zhihu.com/']
def parse(self, response):
pass
5、然后,可以我们按照name来运行爬虫
scrapy crawl 'zhihuspider'
二、项目文件详细分析
1、spriders文件夹
#项目文件,以后的代码都要在这里写入
zhihuspider.py
2、items.py
from scrapy import Item,Field
class UserItem(Item):
#Item 对象是种简单的容器,保存了爬取到得数据。 其提供了 类似于词典(dictionary-like) 的API以及用于声明可用字段的简单语法。
# define the fields for your item here like:
#爬取所需要的数据的名称在这里定义,很像字典
# name = scrapy.Field()
3、pipelines.py
当Item在Spider中被收集之后,它将会被传递到Item Pipeline,一些组件会按照一定的顺序执行对Item的处理
###主要是处理以下4点任务
1.清理HTML数据
2.验证爬取的数据(检查item包含某些字段)
3.查重(并丢弃)
4.将爬取结果保存到数据库中
#存到mogodb数据库
import pymongo
class MongoPipeline(object):
collection_name = 'scrapy_items'
def __init__(self, mongo_uri, mongo_db):
self.mongo_uri = mongo_uri
self.mongo_db = mongo_db
@classmethod
def from_crawler(cls, crawler):
return cls(
mongo_uri=crawler.settings.get('MONGO_URI'),
mongo_db=crawler.settings.get('MONGO_DATABASE', 'items')
)
def open_spider(self, spider):
self.client = pymongo.MongoClient(self.mongo_uri)
self.db = self.client[self.mongo_db]
def close_spider(self, spider):
self.client.close()
def process_item(self, item, spider):
self.db[self.collection_name].insert_one(dict(item))
return item
4、settings.py
用于设置常量的,例如 mongodb 的 url 和 database
BOT_NAME = 'zhihu'
SPIDER_MODULES = ['zhihu.spiders']
NEWSPIDER_MODULE = 'zhihu.spiders'
MONGO_URI='localhost'
MONGO_DATABASE='zhihu'
#默认是True的这个变量是用来是否爬robot文件的改为False是允许的意思
ROBOTSTXT_OBEY = True