スクレイピーはDoubantop250をクロールし、MySQLデータベースに挿入します(エントリーレベル)

スクレイピーはDoubantop250をクロールし、MySQLデータベースに挿入します(エントリーレベル)

  1. pythonをローカルにインストールし、公式Webサイトにアクセスして必要なバージョンをダウンロードし、コマンドラインからpythonと入力して、インストール後に確認します。
C:\Users\jrkj-kaifa08\PycharmProjects\fzreport>python
Python 3.7.8 (tags/v3.7.8:4b47a5b6ba, Jun 28 2020, 08:53:46) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.

上記のシナリオが表示された場合、インストールは成功しています。

  1. スクレイプフレームワークをローカル環境にインストールするには、コマンドラインにpip install scarpと入力します。インストール後、スクレイプと入力して次のことを確認できます。
C:\Users\jrkj-kaifa08\PycharmProjects\fzreport>scrapy
Scrapy 2.2.0 - project: fzreport

Usage:
  scrapy <command> [options] [args]

Available commands:
  bench         Run quick benchmark test
  check         Check spider contracts
  commands
  crawl         Run a spider
  edit          Edit spider
  fetch         Fetch a URL using the Scrapy downloader
  genspider     Generate new spider using pre-defined templates
  list          List available spiders
  parse         Parse URL (using its spider) and print the results
  runspider     Run a self-contained spider (without creating a project)
  settings      Get settings values
  shell         Interactive scraping console
  startproject  Create new project
  version       Print Scrapy version
  view          Open URL in browser, as seen by Scrapy

Use "scrapy <command> -h" to see more info about a command

上記のシナリオが表示された場合、インストールは成功しています。

  1. この実験では、コードはPyCharmで記述されています。公式ウェブサイトにアクセスして、コミュニティバージョンをダウンロードすることもできます。これは無料で、誰にでもできるインストールです。

  2. 次にトピックを入力し、プロジェクトの作成を開始します。

    (1)pythonプロジェクトを保存するフォルダーをコンピューター上でローカルに見つけ、上記のパスでcmdを実行し、Enterキーを押します。

これにより、コマンドラインが開き、コマンドラインにscrapy startproject DoubanMovieと入力します(DoubanMovieというプロジェクトを作成します)。

d:\>scrapy startproject DoubanMovie
New Scrapy project 'DoubanMovie', using template directory 'c:\users\jrkj-kaifa08\appdata\local\programs\python\python37\lib\site-packages\scrapy\templates\project', created in:
    d:\DoubanMovie

You can start your first spider with:
    cd DoubanMovie
    scrapy genspider example example.com

次に、cd DoubanMovieを実行します(ここでは、Linuxのようにタブキーを使用して完了できます)

プロジェクトフォルダに入った後、scrapy genspider douban movie.douban.comを実行します(movie.douban.comに基づいてWebクローラーを作成します)

d:\>cd DoubanMovie
d:\DoubanMovie>scrapy genspider douban  movie.douban.com
Created spider 'douban' using template 'basic' in module:
  DoubanMovie.spiders.douban

(2)作成したプロジェクトをPyCharmで開くと、次の構造が表示されます。

ここに写真の説明を挿入
最初に構成ファイルsetting.pyを変更します

ROBOTSTXT_OBEY = False

元のTrueをFalseに変更します(クローラープロトコルに準拠するかどうかに関係なく、学習フェーズでFalseに変更する必要があります)

ITEM_PIPELINES = {
    
    
    'DoubanMovie.pipelines.Dou': 300,
}

また、このコードのコメントを開きます。ここの値が小さいほど、速度が速くなります。

(3)次にDoubanMovieを開きます

もう一度F12キーを押すと、すべての映画情報が<olclass = "grid_view">タグに含まれていることがわかります。ここに写真の説明を挿入

これは単なるテストであるため、映画名、評価、人数の4つのフィールドのみを取得します。
ここに写真の説明を挿入

各映画の情報がliタグに含まれていることがわかります。したがって、そのxpathパスは次のようになります。

'//ol[@class="grid_view"]/li'

ランキング情報はemタグにあり、そのxpathは

'.//div[@class="pic"]/em/text()'

映画名情報はタグの下の最初のスパンにあり、そのxpathは

'.//div[@class="hd"]/a/span[1]/text()'

映画の評価情報は、div class = starタグの下のspanclass = "rating_num"にあり、そのxpathは

'.//div[@class="star"]/span[@class="rating_num"]/text()'

映画の評価数に関する情報、div class = starタグの下のスパンにあり、そのxpathは

'.//div[@class="star"]/span/text()'

次に、items.pyの作成を開始できます

import scrapy

class DouItem(scrapy.Item):
    # define the fields for your item here like:
    # 排名
    ranking = scrapy.Field()
    # 电影名称
    movie_name = scrapy.Field()
    # 评分
    score = scrapy.Field()
    # 评论人数
    score_num = scrapy.Field()
    pass

この場所を自分で理解すると、javaのboクラスに似ている可能性があります。items.pyファイルを開くと、上記の例が表示されます。例に従ってください。

その後はハイライトdouban.pyです

# -*- coding: utf-8 -*-
import scrapy
from DoubanMovie.items import DouItem


class DouSpider(scrapy.Spider):
    name = 'douban'

    # allowed_domains = ['movie.douban.com']
    def start_requests(self):
        start_urls = 'https://movie.douban.com/top250'
        yield scrapy.Request(start_urls)

    def parse(self, response):
        item = DouItem()
        movies = response.xpath('//ol[@class="grid_view"]/li')
        for movie in movies:
            item['ranking'] = movie.xpath('.//div[@class="pic"]/em/text()').extract()[0]
            item['movie_name'] = movie.xpath('.//div[@class="hd"]/a/span[1]/text()').extract()[0]
            item['score'] = movie.xpath('.//div[@class="star"]/span[@class="rating_num"]/text()').extract()[0]
            item['score_num'] = movie.xpath('.//div[@class="star"]/span/text()').re(r'(\d+)人评价')[0]  # Selector也有一种.re()
            print(item['movie_name'], "------------------------")
            yield item
        next_url = response.xpath('//span[@class="next"]/a/@href').extract()
        if next_url:
            next_url = 'https://movie.douban.com/top250' + next_url[0]
            yield scrapy.Request(next_url)

次に、データベースに接続するためのpipelines.pyがあります。
ここでは、pymysqlコンポーネントをダウンロードして、コマンドラインで実行する必要があります。

pip install pymysql

次に、mysqlデータベースを開くためのテーブルを作成する必要があります。テストのため、次のステートメントを入力して、すべてのデータタイプをvarcharに設定します。

create table movieTable(
	ranking				varchar(5),
	movie_name			varchar(100),
	score				varchar(10),
	score_num			varchar(10)
)

次はpipelines.pyのコードです

import pymysql
import pymysql.cursors


class Dou(object):

    def __init__(self):
        # 连接MySQL数据库
        self.connect = pymysql.connect(host='localhost', user='zds', password='zds', db='zds', port=3306)
        self.cursor = self.connect.cursor()
        print("______________数据库连接已建立")

    def process_item(self, item, Spider):
        # 往数据库里面写入数据
        print("--------------正在插入数据")
        self.cursor.execute(
            'insert into movieTable(ranking,movie_name,score,score_num)VALUES ("{}","{}","{}","{}")'.format(item['ranking'], item['movie_name'], item['score'], item['score_num']))
        self.connect.commit()
        return item

    # 关闭数据库
    def close_spider(self, Spider):
        print("============正在关闭数据库连接")
        self.cursor.close()
        self.connect.close()

すべてのコードを記述して保存したら、コマンドラインで実行できます。

C:\Users\jrkj-kaifa08\PycharmProjects\DoubanMovie>scrapy crawl douban

エラーなしで実行が完了したら、データベースに移動してデータを確認し、データが挿入されていることを確認します。
ここに写真の説明を挿入
データをファイルに保存する場合は、コマンドラインで実行できます。

C:\Users\jrkj-kaifa08\PycharmProjects\DoubanMovie>scrapy crawl douban douban.csv

この場合、データは現在のパスの下のdouban.csvファイルに保存されます。

おすすめ

転載: blog.csdn.net/qq_37823979/article/details/107201422