Je veux apprendre Python en secret, puis choquer tout le monde (jour 13)

Insérez la description de l'image ici

Le titre n'est pas destiné à offenser, mais je pense que cette annonce est amusante
. Prenez la carte mentale ci - dessus si vous l'aimez. Je ne peux pas en apprendre autant de toute façon.

Préface

Premier examen: je veux apprendre secrètement Python (jour 12)

La douzième partie du projet est toujours en cours de mise à jour. Hé, même si je ne peux pas parler de tout, c'est toujours pressé. Non, la génération automatique du formulaire est terminée, mais le réseau scolaire ne peut vraiment pas le supporter.2G, s'il ne peut pas être testé, il ne peut être laissé que là-bas.
Tu peux aller au test demain et sortir de l'école demain.

À propos du framework scrapy aujourd'hui, de nombreux amis m'ont demandé pourquoi il n'avait pas été mis à jour récemment. Ce n'est vraiment pas facile à faire. L'installation a demandé quelques efforts, mais vous n'avez pas à faire autant de détours en suivant mes étapes d'installation. Up.

Insérez un push: (Si c'est Xiaobai, vous pouvez regarder le paragraphe suivant)

Bienvenue dans notre cercle

J'ai créé un groupe de questions / réponses Python, les amis intéressés peuvent le découvrir: De quel type de groupe s'agit-il?

Il y a déjà plus de 1300 amis dans le groupe! ! !

Portail à travers le groupe: Portail


本系列文默认各位有一定的C或C++基础,因为我是学了点C++的皮毛之后入手的Python,这里也要感谢齐锋学长送来的支持。
本系列文默认各位会百度,学习‘模块’这个模块的话,还是建议大家有自己的编辑器和编译器的,上一篇已经给大家做了推荐啦?

我要的不多,点个关注就好啦
然后呢,本系列的目录嘛,说实话我个人比较倾向于那两本 Primer Plus,所以就跟着它们的目录结构吧。

本系列也会着重培养各位的自主动手能力,毕竟我不可能把所有知识点都给你讲到,所以自己解决需求的能力就尤为重要,所以我在文中埋得坑请不要把它们看成坑,那是我留给你们的锻炼机会,请各显神通,自行解决。

Installez scrapy

Ici, je ne vais pas dire combien de fosses j'ai marché pendant le processus d'installation, de toute façon, vous me suivez maintenant à faire:

1. Win + R, cmd, ouvrez le terminal
2.

pip install pywin32
pip install pyopenssl
pip install wheel

3. Ouvrez https://www.lfd.uci.edu/~gohlke/pythonlibs/, recherchez deux fichiers whl, twisted et lxml, et téléchargez-les.

4. Entrez le répertoire de stockage des deux fichiers,

pip install Twisted·····
pip install lxml····

5. Installez scrapy, ici vous devez introduire des sources nationales.

pip install Scrapy -i https://pypi.tuna.tsinghua.edu.cn/simple

Après avoir terminé, la vitesse siffle.

Eh bien, quand cela vous montre du succès, est-ce que tout va bien? Ce n'est pas le cas.
Il y a deux choses que vous devez faire ici:
1. Déterminez d'abord quel Python vous avez installé. S'il n'y a qu'un seul Python sur votre ordinateur, ce n'est pas un fardeau. Par exemple, il y a trois Pythons sur mon ordinateur.
À ce moment: entrée du terminal: python --version, vous pouvez voir le numéro de version de Python.
2. Lors de la création d'un nouveau fichier,
Insérez la description de l'image ici

Génial, cela résout le problème que certains paquets ne peuvent pas être installés sur pycharm, et le problème que certains paquets ne peuvent pas être résolus sans renverser le mur.

OK, commençons le sujet d’aujourd’hui: Scrapy.

Qu'est-ce que la tremblante

Scrapy, un framework de scraping d'écran et de web scraping rapide et de haut niveau développé par Python, est utilisé pour gratter des sites Web et extraire des données structurées à partir de pages. Scrapy est polyvalent et peut être utilisé pour l'exploration de données, la surveillance et les tests automatisés.

Newton a dit qu'il se tenait simplement sur les épaules de géants. Pour être honnête, en tant que personne ayant appris le C ++, je n'ai pas expérimenté la puissance du framework.J'ai entendu dire que le framework peut être personnalisé.Nous avons seulement besoin de remplir les principales fonctions dont nous avons besoin pour obtenir rapidement ce que nous voulons. L'effet est comme l'insertion d'un disque différent dans un DVD.

L'attrait de Scrapy est qu'il s'agit d'un framework que n'importe qui peut facilement modifier en fonction de ses besoins. Il fournit également des classes de base pour plusieurs types de robots d'exploration, tels que BaseSpider, le robot d'exploration de plan de site, etc. La dernière version fournit également la prise en charge de l'explorateur web2.0.

architecture scrapy

Insérez la description de l'image ici

Ce schéma d'architecture peut-il être compris? Baidu Yisou est essentiellement tout cela.

Scrapy Engine(引擎):负责Spider、ItemPipeline、Downloader、Scheduler中间的通讯,信号、数据传递等。
Scheduler(调度器):它负责接受引擎发送过来的Request请求,并按照一定的方式进行整理排列,入队,当引擎需要时,交还给引擎。
Downloader(下载器):负责下载Scrapy Engine(引擎)发送的所有Requests请求,并将其获取到的Responses交还给Scrapy Engine(引擎),由引擎交给Spider来处理。
Spider(爬虫):它负责处理所有Responses,从中分析提取数据,获取Item字段需要的数据,并将需要跟进的URL提交给引擎,再次进入Scheduler(调度器)。
Item Pipeline(管道):它负责处理Spider中获取到的Item,并进行进行后期处理(详细分析、过滤、存储等)的地方。
Downloader Middlewares(下载中间件):一个可以自定义扩展下载功能的组件。
Spider Middlewares(Spider中间件):一个可以自定扩展和操作引擎和Spider中间通信的功能组件。

Remarque: le fonctionnement de l'ensemble du projet ne s'arrêtera que lorsqu'il n'y aura plus de demandes dans le planificateur.
En d'autres termes, si une tâche échoue pendant le processus en cours, l'URL sera revisitée.

J'ai vu un paragraphe très vivant sur Internet:

!Spider, 你要处理哪一个网站?

2 Spider:老大要我处理xxxx.com。

3 引擎:你把第一个需要处理的URL给我吧。

4 Spider:给你,第一个URL是xxxxxxx.com。

5 引擎:Hi!调度器,我这有request请求你帮我排序入队一下。

6 调度器:好的,正在处理你等一下。

7 引擎:Hi!调度器,把你处理好的request请求给我。

8 调度器:给你,这是我处理好的request

9 引擎:Hi!下载器,你按照老大的下载中间件的设置帮我下载一下这个request请求

10 下载器:好的!给你,这是下载好的东西。(如果失败:sorry,这个request下载失败了。然后引擎告诉调度器,这个request下载失败了,你记录一下,我们待会儿再下载)

11 引擎:Hi!Spider,这是下载好的东西,并且已经按照老大的下载中间件处理过了,你自己处理一下(注意!这儿responses默认是交给def parse()这个函数处理的)

12 Spider:(处理完毕数据之后对于需要跟进的URL),Hi!引擎,我这里有两个结果,这个是我需要跟进的URL,还有这个是我获取到的Item数据。

13 引擎:Hi !管道 我这儿有个item你帮我处理一下!调度器!这是需要跟进URL你帮我处理下。然后从第四步开始循环,直到获取完老大需要全部信息。

14 管道``调度器:好的,现在就做!

projet de scrapy expérience pycharm

Première étape de Genius: créer un projet scrapy

Puisque pycharm ne peut pas créer un projet scrapy directement, procédez comme suit:
1. Ouvrez le terminal dans pycharm, entrez le nom du projet scrapy startproject (par exemple: Test_Scrapy)
, actualisez-le deux fois, et quelque chose comme ceci apparaîtra:
Insérez la description de l'image ici

Que la création a réussi.

Introduisons brièvement la fonction de chaque fichier principal:

scrapy.cfg :项目的配置文件
test_scrapy/ :项目的Python模块,将会从这里引用代码
test_scrapy/items.py :项目的目标文件
test_scrapy/pipelines.py :项目的管道文件
test_scrapy/settings.py :目的设置文件
test_scrapy/spiders/ :存储爬虫代码目录

Genius Étape 2: effacez les objectifs et créez des éléments

Nous avons l'intention d'explorer: http://www.itcast.cn/channel/les noms, titres et informations personnelles de tous les conférenciers sur le site.

打开test_scrapy目录下的items.py
Item 定义结构化数据字段,用来保存爬取到的数据,有点像Python中的dict,但是提供了一些额外的保护减少错误。
可以通过创建一个 scrapy.Item 类, 并且定义类型为
scrapy.Field的类属性来定义一个Item(可以理解成类似于ORM的映射关系)。

接下来,创建一个ItcastItem 类,和构建item模型(model)。
class ItcastItem(scrapy.Item):
	name = scrapy.Field()
    title = scrapy.Field()
    info = scrapy.Field()

Faire des robots

Entrez dans le répertoire spiders et entrez la commande sur le terminal:

scrapy genspider itcast "itcast.cn"

Un robot d'exploration nommé itcast sera créé dans le répertoire test_scrapy / test_scrapy / spider, et la portée du domaine d'exploration sera spécifiée:

Ouvrez itcast.py dans le répertoire spider, le code suivant est ajouté par défaut:

import scrapy

class ItcastSpider(scrapy.Spider):
    name = "itcast"
    allowed_domains = ["itcast.cn"]
    start_urls = (
        'http://www.itcast.cn/',
    )

    def parse(self, response):
        pass

Pour créer une Spider, vous devez créer une sous-classe avec la classe scrapy.Spider et déterminer trois propriétés obligatoires et une méthode.

name = "" :这个爬虫的识别名称,必须是唯一的,在不同的爬虫必须定义不同的名字。

allow_domains = [] 是搜索的域名范围,也就是爬虫的约束区域,规定爬虫只爬取这个域名下的网页,不存在的URL会被忽略。

start_urls = () :爬取的URL元祖/列表。爬虫从这里开始抓取数据,所以,第一次下载的数据将会从这些urls开始。其他子URL将会从这些起始URL中继承性生成。

parse (self, response): méthode d'analyse. Une fois que chaque URL initiale est téléchargée, elle est appelée. Lors de l'appel, l'objet Response renvoyé par chaque URL est transmis comme seul paramètre. Les principales fonctions sont les suivantes:

负责解析返回的网页数据(response.body),提取结构化数据(生成item)
生成需要下一页的URL请求。

Modifiez la valeur de start_urls sur la première URL qui doit être explorée

start_urls = ("http://www.itcast.cn/channel/teacher.shtml",)

Modifier la méthode parse ()

def parse(self, response):
    filename = "teacher.html"
    open(filename, 'w').write(response.body)

Ensuite, lancez-le pour voir, exécutez-le dans le répertoire test_scrapy / test_scrapy:

scrapy crawl itcast

Oui, c'est itcast. Regardez le code ci-dessus. C'est l'attribut name de la classe ItcastSpider, qui est le nom unique du robot utilisant la commande scrapy genspider.

Après l'exécution, si [scrapy] INFO: Spider fermé (terminé) apparaît dans le journal imprimé, cela signifie que l'exécution est terminée. Ensuite, il y a un fichier teacher.html dans le dossier actuel, qui contient toutes les informations de code source de la page Web que nous voulons simplement explorer.


Récupérer des données

Après avoir parcouru toute la page Web, l'étape suivante est le processus de récupération.

Nous avons précédemment défini une classe ItcastItem dans test_scrapy / test_scrapy / items.py. Présentez ici

 from test_scrapy/test_scrapy/.items import ItcastItem

Eh bien, si vous l'écrivez de cette façon, vous devrez signaler une erreur. Si vous ne l'écrivez pas ainsi, il n'y a aucun moyen. Cela a pris beaucoup de temps.

from ..items import ItcastItem

Ensuite, encapsulez les données que nous avons reçues dans un objet ItcastItem, qui peut enregistrer les attributs de chaque enseignant:

from test_scrapy.items import ItcastItem

def parse(self, response):
    #open("teacher.html","wb").write(response.body).close()

    # 存放老师信息的集合
    items = []

    for each in response.xpath("//div[@class='li_txt']"):
        # 将我们得到的数据封装到一个 `ItcastItem` 对象
        item = ItcastItem()
        #extract()方法返回的都是unicode字符串
        name = each.xpath("h3/text()").extract()
        title = each.xpath("h4/text()").extract()
        info = each.xpath("p/text()").extract()

        #xpath返回的是包含一个元素的列表
        item['name'] = name[0]
        item['title'] = title[0]
        item['info'] = info[0]

        items.append(item)

    # 直接返回最后数据
    return items

Il existe quatre façons plus simples d'enregistrer des informations dans des fichiers de sortie scrapy, -o au format spécifié, ici j'utilise des fichiers csv

expression de virgule csv, ouverte avec Excel

scrapy crawl itcast -o teachers.csv

J'ai été un peu occupé ces derniers temps. Passons d'abord en revue ce cadre, puis développons et développons plus tard. C'est difficile. . .

Je suppose que tu aimes

Origine blog.csdn.net/qq_43762191/article/details/109709052
conseillé
Classement