scrapy explore Douban top250 et l'insère dans la base de données MySQL (entrée de gamme)
- 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.
- 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.
-
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.
-
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:
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">
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.
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.
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.