scrapy rastreia Douban top250 e o insere no banco de dados MySQL (nível de entrada)

scrapy rastreia Douban top250 e o insere no banco de dados MySQL (nível de entrada)

  1. Instale o python localmente, acesse o site oficial para baixar a versão desejada e digite python na linha de comando para verificar após a instalação:
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.

Se o cenário acima aparecer, a instalação foi bem-sucedida.

  1. Para instalar o scrapy framework no ambiente local, você pode inserir pip install scrapy na linha de comando. Após a instalação, você pode inserir scrapy para verificar:
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

Se o cenário acima aparecer, a instalação foi bem-sucedida.

  1. Neste experimento, o código é escrito em PyCharm, você também pode ir ao site oficial para baixar a versão da comunidade, é grátis, apenas uma instalação à prova de idiotas.

  2. Em seguida, entre no tópico e comece a criar o projeto:

    (1) Encontre uma pasta localmente no computador para armazenar seu projeto Python, cmd no caminho acima e pressione Enter

Isso abrirá a linha de comando e, em seguida, insira scrapy startproject DoubanMovie na linha de comando (crie um projeto chamado 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

Então execute cd DoubanMovie (aqui você pode usar a tecla tab para completá-lo como no Linux)

Depois de entrar na pasta do projeto, execute scrapy genspider douban movie.douban.com (crie um rastreador da web baseado em 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) Abra o projeto criado através do PyCharm e a seguinte estrutura aparecerá:

Insira a descrição da imagem aqui
Primeiro modifique o arquivo de configuração setting.py

ROBOTSTXT_OBEY = False

Altere o original True para False (para cumprir com o protocolo do rastreador, temos que alterá-lo para False na fase de aprendizagem)

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

Abra também o comentário desse código, quanto menor o valor aqui, mais rápida é a velocidade.

(3) Abra o Douban Movie

Pressione F12 novamente, você pode ver que todas as informações do filme estão contidas na tag <ol class = "grid_view">Insira a descrição da imagem aqui

Por ser apenas um teste, consideramos apenas os quatro campos de classificação do nome do filme, classificação e número de pessoas.
Insira a descrição da imagem aqui

Você pode ver que as informações de cada filme estão contidas em uma tag li, então seu caminho xpath é

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

As informações de classificação estão na tag em, e seu xpath é

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

As informações do nome do filme estão no primeiro período sob a tag a e seu xpath é

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

As informações de classificação do filme estão em span class = "rating_num" na tag div class = star e seu xpath é

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

As informações sobre o número de classificações de filmes estão no intervalo sob a tag div class = star e seu xpath é

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

Então você pode começar a escrever 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

Se eu mesmo entendo esse lugar, pode ser semelhante à classe bo do java.Ao abrir o arquivo items.py, haverá um exemplo acima, basta seguir o exemplo.

Depois disso é o destaque 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)

Depois, há pipelines.py para se conectar ao banco de dados.
Aqui você precisa fazer o download do componente pymysql e executá-lo na linha de comando

pip install pymysql

Em seguida, você precisa criar uma tabela para abrir o banco de dados mysql, digite a seguinte instrução, por causa do teste, então todos os tipos de dados são definidos como varchar.

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

A seguir está o código 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()

Depois que todo o código é escrito e salvo, ele pode ser executado na linha de comando

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

Depois que a execução for concluída sem erros, vá para o banco de dados para verificar os dados e descobrir se os dados foram inseridos.
Insira a descrição da imagem aqui
Se você deseja armazenar os dados em um arquivo, pode executá-lo na linha de comando

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

Nesse caso, os dados serão armazenados no arquivo douban.csv no caminho atual.

Acho que você gosta

Origin blog.csdn.net/qq_37823979/article/details/107201422
Recomendado
Clasificación