IMDBのチャートは、データベースのMongoDBに格納されている爬虫類Scrapyデータをクロール

爬虫類最初のステップ:新規プロジェクト

  • コマンドを実行し、適切な場所を選択します。scrapy startproje XXXX(私のプロジェクト名:douban)

爬虫類のステップ2:明確な目標

  • IMDBのトップURL:httpsの:? //Movie.douban.com/top250開始= 0、
    分析あなたがリクエストを送信するには、この条件を利用することができますので、最大225から25の刻みのステップで、srart = URLの数字の背後に見つかりましたリクエスト
  • この記事では、もちろん、あなたがより多くの情報が欲しい、三つのフィールド、フィルム名、スコアやプレゼンテーションを取っ可能であり、
    • 項目[「名前」]劇場版名
    • 項目[ "rating_num"]:評価
    • 項目[ "INQ"]:はじめに
  • XPathの抽出データ
# 电影名字  extract()方法的作用是将xpath对象转为unicode对象
item["name"] = each.xpath('.//span[@class="title"][1]/text()').extract()[0]
# 评分
item["rating_num"] = each.xpath('.//span[@class="rating_num"]/text()').extract()[0]
# 介绍
item["inq"] = each.xpath('.//span[@class="inq"]/text()').extract()[0]
  • 書かれitems.pyファイル
import scrapy
class DoubanItem(scrapy.Item):
    # 电影名
    name = scrapy.Field()
    # 评分
    rating_num = scrapy.Field()
    # 介绍
    inq = scrapy.Field()

爬虫類第三段階:書き込みファイル爬虫類スパイダー

  • ここではクモ型と、コマンドを実行します。scrapy genspider doubanMovie「movie.douban.comを」(プロジェクト名と爬虫類名前は同じにすることはできません)
import scrapy
# 从items.py文件中导入DoubanItem类
from douban.items import DoubanItem
class DoubanmovieSpider(scrapy.Spider):
    # 爬虫名 
    name = 'doubanMovie'
    # 允许爬虫的范围
    allowed_domains = ['movie.douban.com']
    # 构造url地址,因为最后那个数字是变化的,可以动态生成url地址
    url = "https://movie.douban.com/top250?start="
    offset = 0
    start_urls = [url + str(offset)]
    # 页面解析函数
    def parse(self, response):
        # xpath找到一个根节点
        datas = response.xpath('//div[@class="item"]//div[@class="info"]')
        for each in datas:
            # 实例化item对象
            item = DoubanItem()
            # 电影名字  extract()方法的作用是将xpath对象转为unicode对象
            item["name"] = each.xpath('.//span[@class="title"][1]/text()').extract()[0]
            # 评分
            item["rating_num"] = each.xpath('.//span[@class="rating_num"]/text()').extract()[0]
            # 介绍
            item["inq"] = each.xpath('.//span[@class="inq"]/text()').extract()[0]
            yield item
        # 当start后面的数字小于225就一直发请求
        if self.offset < 225:
            self.offset +=25
            # 回调函数仍然是这个方法
            yield scrapy.Request(self.url+str(self.offset),callback=self.parse)

爬虫類のステップ4:ストレージの内容は、パイプファイルpipeline.pyの準備

  • MongoDBはデータベースに格納されたデータは、あなたが(あなたもpipelinseファイルに書き込みに選択することができ、もちろん)ホスト、ポート、データベース名、テーブル名、コンフィギュレーション・ファイルの4つのフィールドのデータを設定する必要があります
# python中操作Mongodb数据库是通过pymongo这个模块来实现的,所以要导入这个模块
import pymongo
# 导入setting.py中的相关内容
from scrapy.utils.project import get_project_settings
class DoubanPipeline(object):
    def __init__(self):
        settings = get_project_settings()
        # 主机ip
        host = settings["MONGODB_HOST"]
        # port
        port = settings["MONGODB_PORT"]
        # 数据库名
        dbname = settings['MONGODB_DBNAME']
        # 表名
        sheetname= settings['MONGODB_SHEETNAME']
        # 创建数据库连接
        client = pymongo.MongoClient(host=host,port=port)
        # 指定数据库
        mydb = client[dbname]
        # 指定数据库表名字
        self.sheet = mydb[sheetname]
    def process_item(self, item, spider):
        # 转为字典格式
        data = dict(item)
        # 插入数据
        self.sheet.insert(data)
        return item

最後にsetting.pyを実行することができ、設定ファイルを終えました

  • だけのコードを追加または変更する必要のないフルを貼り付け
# 这个需要自己取消注释,才会执行我们的管道方法
ITEM_PIPELINES = {
   'douban.pipelines.DoubanPipeline': 300,
}
# MONGODB 主机名
MONGODB_HOST = "127.0.0.1"
# MONGODB 端口号
MONGODB_PORT = 27017
# MONGODB 数据库名
MONGODB_DBNAME = "Douban"
# MONGODB 存放的表名
MONGODB_SHEETNAME = "doubanmovies"

業績

  • ロボ3Tのデータ可視化ツールを参照してください:

    図250は、データ、最初ショーシャンクの空にを取得することです。

おすすめ

転載: www.cnblogs.com/TSOSTSOS/p/12173908.html