本文适用于初学者 可以体会一下scrapy框架的强大
前言
初识scrapy框架
首先你已安装scrapy模块和mongodb数据库
一、scrapy框架是什么?
是一个功能强大的爬虫框架,可以用少量代码爬取网站内容。
以下以豆瓣网为例子演示框架的创建以及运行
链接域名:“movie.douban.com”
初始url:“http://movie.douban.com/top250”
二、步骤
1.创建项目
在命令行选择自己喜欢的文件夹下创建项目使用 scrapy startproject +爬虫名字
创建成功后目录图如下:
代码如下(示例):
D:\Shiyin\python-code\project\111>scrapy startproject DoubanSpider
2.生成爬虫文件
在命令行中进入DoubanSpider文件夹下使用 scrapy genspider +爬虫文件名字+域名
生成目录如下:
代码如下(示例):
D:\Shiyin\python-code\project\111\DoubanSpider>scrapy genspider Douban movie.douban.com
3.进入items文件
代码如下(示例):编写代码
# Define here the models for your scraped items
#
# See documentation in:
# https://docs.scrapy.org/en/latest/topics/items.html
import scrapy
class DoubanspiderItem(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
# 序号
serial_name = scrapy.Field()
# 名称
movie_name = scrapy.Field()
# 介绍
introduce = scrapy.Field()
# 星
star = scrapy.Field()
# 评论数
evaluate = scrapy.Field()
# 描述
describe = scrapy.Field()
4.进入爬虫文件Douban
代码如下(示例):编写如下代码
import scrapy
# from 爬虫项目名.items import items文件中定义的类
from DoubanSpider.items import DoubanspiderItem
class DoubanSpider(scrapy.Spider):
# 爬虫名字
name = "Douban"
# 允许的域名
allowed_domains = ["movie.douban.com"]
# 入口url,扔到调度器里去
start_urls = ["http://movie.douban.com/top250"]
# 默认的解析方式
def parse(self, response):
# 大体的内容
selectors = response.xpath('//ol[@class="grid_view"]/li')
# 详细解析
for selector in selectors:
# items文件导入进来
douban_item = DoubanspiderItem()
# 序号
douban_item["serial_name"] = selector.xpath(
'./div/div[@class="pic"]/em/text()'
).get()
# 名称
douban_item["movie_name"] = selector.xpath(
'./div/div/div[@class="hd"]/a/span[1]/text()'
).get()
# 星
douban_item["star"] = selector.xpath(
"./div/div/div/div/span[2]/text()"
).get()
# 评论数
douban_item["evaluate"] = selector.xpath(
"./div/div/div/div/span[4]/text()"
).get()
# 描述
douban_item["describe"] = selector.xpath(
'./div/div/div/p[@class="quote"]/span/text()'
).get()
# 介绍
content_all = selector.xpath("./div/div/div/p[1]/text()").extract()
for content in content_all:
douban_item["introduce"] = "".join(content.split())
#放到管道里去
yield douban_item
#下一页的url
next_url = response.xpath('//span[@class="next"]/link/@href').extract()
if next_url:
next_url = next_url[0]
#重复解析
yield scrapy.Request(
"http://movie.douban.com/top250" + next_url, callback=self.parse
)
5.进入settings文件
代码如下(示例):
加入如下代码
USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36"
# 开启管道
ITEM_PIPELINES = {
"DoubanSpider.pipelines.DoubanspiderPipeline": 300,
}
MONGODB_HOST = "127.0.0.1"
MONGODB_PORT = 27017
MONGODB_DB_NAME = "douban"
MONGODB_DB_COLLECTION = "douban_movie"
HTTPERROR_ALLOWED_CODES = [301]
6.进入pipelines文件
连接mongodb数据库并将数据存进数据库
代码如下(示例):代码如下
# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://docs.scrapy.org/en/latest/topics/item-pipeline.html
# useful for handling different item types with a single interface
from itemadapter import ItemAdapter
import pymongo
# 引用设置文件中的设置
from DoubanSpider.settings import (
MONGODB_DB_COLLECTION,
MONGODB_DB_NAME,
MONGODB_HOST,
MONGODB_PORT,
)
class DoubanspiderPipeline(object):
def __init__(self):
host = MONGODB_HOST
# 端口
port = MONGODB_PORT
# 数据库名字
db_name = MONGODB_DB_NAME
# 表名
sheet_name = MONGODB_DB_COLLECTION
# 用户
client = pymongo.MongoClient(host=host, port=port)
db = client[db_name]
self.post = db[sheet_name]
def process_item(self, item, spider):
data = dict(item)
self.post.insert(data)
return item
7.运行爬虫文件
代码如下(示例):进入命令窗口在DoubanSpider文件夹下运行命令 scrapy crawl +爬虫名字
D:\Shiyin\python-code\project\111\DoubanSpider>scrapy crawl Douban
8.生成json文件
代码如下(示例): 在命令行中进入DoubanSpider文件夹下使用 scrapy crawl Douban -o items.json
D:\Shiyin\python-code\project\111\DoubanSpider>scrapy crawl Douban -o items.json
9.生成csv文件
代码如下(示例):: 在命令行中进入DoubanSpider文件夹下使用 scrapy crawl Douban -o items.csv
D:\Shiyin\python-code\project\111\DoubanSpider>scrapy crawl Douban -o items.csv