初识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

总结

这个就是scrapy框架爬取豆瓣的过程。希望对你有所帮助。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值