scrapy explore Douban top250 et l'insère dans la base de données MySQL (entrée de gamme)

scrapy explore Douban top250 et l'insère dans la base de données MySQL (entrée de gamme)

  1. Installez python localement, accédez au site Web officiel pour télécharger la version souhaitée et entrez python via la ligne de commande pour vérifier après l'installation:
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.

Si le scénario ci-dessus apparaît, l'installation est réussie.

  1. Pour installer le framework scrapy dans l'environnement local, vous pouvez entrer pip install scrapy sur la ligne de commande. Après l'installation, vous pouvez entrer scrapy pour vérifier:
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

Si le scénario ci-dessus apparaît, l'installation est réussie.

  1. Dans cette expérience, le code est écrit en PyCharm, vous pouvez également vous rendre sur le site officiel pour télécharger la version communautaire, c'est gratuit, juste une installation infaillible.

  2. Entrez ensuite le sujet et commencez à créer le projet:

    (1) Trouvez un dossier localement sur l'ordinateur pour stocker votre projet python, cmd dans le chemin ci-dessus, et appuyez sur Entrée

Cela va ouvrir la ligne de commande, puis entrer scrapy startproject DoubanMovie dans la ligne de commande (créer un projet appelé 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

Puis exécutez cd DoubanMovie (ici vous pouvez utiliser la touche tab pour le compléter comme sous linux)

Après être entré dans le dossier du projet, exécutez scrapy genspider douban movie.douban.com (créez un robot d'exploration basé sur movie.douban.com)

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

(2) Ouvrez le projet créé via PyCharm et la structure suivante apparaîtra:

Insérez la description de l'image ici
Modifiez d'abord le fichier de configuration setting.py

ROBOTSTXT_OBEY = False

Changer le True d'origine en False (s'il faut se conformer au protocole du robot d'exploration, nous devons le changer en False dans la phase d'apprentissage)

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

Ouvrez également le commentaire de ce code, plus la valeur est basse ici, plus la vitesse est rapide.

(3) Puis ouvrez Douban Movie

Appuyez à nouveau sur F12, vous pouvez voir que toutes les informations sur le film sont contenues dans la balise <ol class = "grid_view">Insérez la description de l'image ici

Comme il ne s'agit que d'un test, nous ne prenons que les quatre champs de classement du nom du film, de la note et du nombre de personnes.
Insérez la description de l'image ici

Vous pouvez voir que les informations de chaque film sont contenues dans une balise li, donc son chemin xpath est

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

Les informations de classement se trouvent dans la balise em et son xpath est

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

Les informations sur le nom du film se trouvent dans la première plage sous la balise a, et son xpath est

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

Les informations de classification des films se trouvent dans span class = "rating_num" sous la balise div class = star, et son xpath est

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

Les informations sur le nombre de classements de films se trouvent dans la plage sous la balise div class = star, et son xpath est

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

Ensuite, vous pouvez commencer à écrire 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

Si je comprends moi-même cet endroit, il peut être similaire à la classe bo de java. Lors de l'ouverture du fichier items.py, il y aura un exemple ci-dessus, il suffit de suivre l'exemple.

Après cela, c'est le point culminant 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)

Ensuite, il y a pipelines.py pour se connecter à la base de données.
Ici, vous devez télécharger le composant pymysql et l'exécuter sur la ligne de commande

pip install pymysql

Ensuite, vous devez créer une table pour ouvrir la base de données mysql, entrez l'instruction suivante, à cause du test, de sorte que tous les types de données sont définis sur varchar.

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

Vient ensuite le code de 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()

Une fois que tout le code est écrit et enregistré, il peut être exécuté sur la ligne de commande

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

Une fois l'exécution terminée sans erreur, accédez à la base de données pour vérifier les données et constater que les données ont été insérées.
Insérez la description de l'image ici
Si vous souhaitez stocker les données dans un fichier, vous pouvez l'exécuter sur la ligne de commande

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

Dans ce cas, les données seront stockées dans le fichier douban.csv sous le chemin courant.

Je suppose que tu aimes

Origine blog.csdn.net/qq_37823979/article/details/107201422
conseillé
Classement