


Afin de louer une maison à Shanghai, j'ai utilisé Python pour parcourir plus de 20 000 informations sur le logement pendant la nuit.
En raison d'un changement soudain de travail récemment, le nouveau bureau est loin de ma résidence actuelle, je dois donc louer une nouvelle maison.
J’ai embarqué sur l’eDonkey de l’agence et j’ai commencé à explorer des coins étranges de la ville.
En passant d'une application de location à l'autre, j'étais vraiment inquiet car l'efficacité était vraiment faible :
Tout d'abord, parce que je vis avec ma petite amie, je dois tenir compte de la distance de travail des deux en même temps, les fonctions de recherche d'une maison en fonction du temps de trajet sur les plates-formes sont relativement inutiles. Certaines plates-formes ne prennent pas en charge la sélection de plusieurs emplacements en même temps, et certaines plates-formes ne peuvent sélectionner que mécaniquement des points avec le même temps de trajet. de chaque emplacement, ce qui ne peut pas répondre aux besoins des utilisateurs.
Deuxièmement, du point de vue d'un locataire, il existe trop de plateformes de location, et la logique de filtrage et de tri de chaque plateforme est incohérente, ce qui rend difficile la comparaison horizontale des informations sur des propriétés similaires.
Mais cela n’a pas d’importance. En tant que programmeur, vous devez bien sûr utiliser les méthodes des programmeurs pour résoudre les problèmes. Ainsi, hier soir, j'ai utilisé un script python pour obtenir toutes les informations sur le logement d'une plateforme de location dans la région de Shanghai, soit plus de 20 000 pièces au total :
Je vais maintenant partager avec vous tout le processus d'exploration des données.
Analysez la page et trouvez le point d'entrée
Entrez d'abord dans la page de location de la plateforme. Vous pouvez voir que la liste des maisons sur la page d'accueil comprend déjà la plupart des informations dont nous avons besoin, et ces informations peuvent être obtenues directement auprès du dom. , pensez donc à collecter les données des pages Web directement en simulant des requêtes.
https://sh.lianjia.com/zufang/
La prochaine étape consiste donc à réfléchir à la manière d'obtenir l'URL. Grâce à l'observation, nous avons constaté qu'il y a plus de 20 000 maisons dans la zone, mais que seules les 100 premières pages de données sont accessibles via la page Web. La limite supérieure du nombre affiché sur chaque page est de 30, ce qui équivaut à un. total de 3k. Il est impossible d’obtenir toutes les informations.
Mais nous pouvons résoudre ce problème en ajoutant des conditions de filtre. Sélectionnez « Jing'an » dans l'élément de filtre et entrez l'url suivante :
https://sh.lianjia.com/zufang/jingan/
Vous pouvez voir qu'il y a plus de 2 000 maisons dans la région, avec 75 pages de données et 30 éléments par page. peut être consulté Toutes les données. Par conséquent, toutes les données de la ville peuvent être obtenues en obtenant séparément les données sur le logement dans chaque quartier.
https://sh.lianjia.com/zufang/jingan/pg2/
Après avoir cliqué sur le bouton de la deuxième page, vous entrez l'URL ci-dessus. Vous pouvez constater que tant que vous modifiez le numéro après la page, vous pouvez entrer le numéro de page correspondant.
Cependant, un problème se pose ici. Les données obtenues pour chaque visite sur le même nombre de pages sont différentes, ce qui entraînera une duplication des données collectées. Nous cliquons donc sur "Derniers ajoutés" dans les conditions de tri et entrons le lien suivant :
https://sh.lianjia.com/zufang/jingan/pg2rco11/
L'ordre des données obtenues par cette méthode de tri est stable À ce stade, notre idée est : visitez d'abord le premier de chaque petite zone. Une page, puis obtenez le nombre maximum de pages dans la région actuelle via la première page, puis accédez à la demande simulée pour accéder à chaque page afin d'obtenir toutes les données.
Exploration des données
Une fois que vous avez une idée, vous devez commencer à écrire du code. Tout d'abord, nous devons collecter tous les liens. Le code est le suivant :
# 所有小地区对应的标识 list=['jingan','xuhui','huangpu','changning','putuo','pudong','baoshan','hongkou','yangpu','minhang','jinshan','jiading','chongming','fengxian','songjiang','qingpu'] # 存放所有链接 urls = [] for a in list: urls.append('https://sh.lianjia.com/zufang/{}/pg1rco11/'.format(a)) # 设置请求头,避免ip被ban headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.9 Safari/537.36'} # 获取当前小地区第1页的dom信息 res = requests.get('https://sh.lianjia.com/zufang/{}/pg1rco11/'.format(a), headers=headers) content = res.text soup = BeautifulSoup(content, 'html.parser') # 获取当前页面的最大页数 page_num = int(soup.find('div', attrs={'class': 'content__pg'}).attrs['data-totalpage']) for i in range(2,page_num+1): # 将所有链接保存到urls中 urls.append('https://sh.lianjia.com/zufang/{}/pg{}rco11/'.format(a,i))
Après cela, nous devons traiter les URL obtenues dans le fichier. étape précédente une par une pour obtenir les données dans le lien. , le code est le suivant :
num=1 for url in urls: print("正在处理第{}页数据...".format(str(num))) res1 = requests.get(url, headers=headers) content1 = res1.text soup1 = BeautifulSoup(content1, 'html.parser') infos = soup1.find('div', {'class': 'content__list'}).find_all('div', {'class': 'content__list--item'})
Organiser les données et exporter le fichier
En observant la structure de la page, on peut obtenir l'emplacement de stockage de chaque élément, trouver le élément de page correspondant et obtenez les informations dont nous avons besoin.
Le code complet est joint ici. Les amis intéressés peuvent remplacer l'identifiant régional et le petit identifiant régional dans le lien en fonction de leurs propres besoins, et ils peuvent ensuite obtenir les informations de leur propre région. Les méthodes d’exploration des autres plateformes de location sont pour la plupart similaires, je n’entrerai donc pas dans les détails.
import time, re, csv, requests import codecs from bs4 import BeautifulSoup print("****处理开始****") with open(r'..sh.csv', 'wb+')as fp: fp.write(codecs.BOM_UTF8) f = open(r'..sh.csv','w+',newline='', encoding='utf-8') writer = csv.writer(f) urls = [] # 所有小地区对应的标识 list=['jingan','xuhui','huangpu','changning','putuo','pudong','baoshan','hongkou','yangpu','minhang','jinshan','jiading','chongming','fengxian','songjiang','qingpu'] # 存放所有链接 urls = [] for a in list: urls.append('https://sh.lianjia.com/zufang/{}/pg1rco11/'.format(a)) # 设置请求头,避免ip被ban headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.9 Safari/537.36'} # 获取当前小地区第1页的dom信息 res = requests.get('https://sh.lianjia.com/zufang/{}/pg1rco11/'.format(a), headers=headers) content = res.text soup = BeautifulSoup(content, 'html.parser') # 获取当前页面的最大页数 page_num = int(soup.find('div', attrs={'class': 'content__pg'}).attrs['data-totalpage']) for i in range(2,page_num+1): # 将所有链接保存到urls中 urls.append('https://sh.lianjia.com/zufang/{}/pg{}rco11/'.format(a,i)) num=1 for url in urls: # 模拟请求 print("正在处理第{}页数据...".format(str(num))) res1 = requests.get(url, headers=headers) content1 = res1.text soup1 = BeautifulSoup(content1, 'html.parser') # 读取页面中数据 infos = soup1.find('div', {'class': 'content__list'}).find_all('div', {'class': 'content__list--item'}) # 数据处理 for info in infos: house_url = 'https://sh.lianjia.com' + info.a['href'] title = info.find('p', {'class': 'content__list--item--title'}).find('a').get_text().strip() group = title.split()[0][3:] price = info.find('span', {'class': 'content__list--item-price'}).get_text() tag = info.find('p', {'class': 'content__list--item--bottom oneline'}).get_text() mixed = info.find('p', {'class': 'content__list--item--des'}).get_text() mix = re.split(r'/', mixed) address = mix[0].strip() area = mix[1].strip() door_orientation = mix[2].strip() style = mix[-1].strip() region = re.split(r'-', address)[0] writer.writerow((house_url, title, group, price, area, address, door_orientation, style, tag, region)) time.sleep(0) print("第{}页数据处理完毕,共{}条数据。".format(str(num), len(infos))) num+=1 f.close() print("****全部完成****")
Après quelques opérations, nous avons obtenu des informations complètes sur le logement auprès de différentes plateformes de location locales. À ce stade, nous pouvons déjà obtenir les données dont nous avons besoin grâce à certaines méthodes de filtrage de base.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

MySQL a une version communautaire gratuite et une version d'entreprise payante. La version communautaire peut être utilisée et modifiée gratuitement, mais le support est limité et convient aux applications avec des exigences de stabilité faibles et des capacités techniques solides. L'Enterprise Edition fournit une prise en charge commerciale complète pour les applications qui nécessitent une base de données stable, fiable et haute performance et disposées à payer pour le soutien. Les facteurs pris en compte lors du choix d'une version comprennent la criticité des applications, la budgétisation et les compétences techniques. Il n'y a pas d'option parfaite, seulement l'option la plus appropriée, et vous devez choisir soigneusement en fonction de la situation spécifique.

L'article présente le fonctionnement de la base de données MySQL. Tout d'abord, vous devez installer un client MySQL, tel que MySQLWorkBench ou le client de ligne de commande. 1. Utilisez la commande MySQL-UROot-P pour vous connecter au serveur et connecter avec le mot de passe du compte racine; 2. Utilisez Createdatabase pour créer une base de données et utilisez Sélectionner une base de données; 3. Utilisez CreateTable pour créer une table, définissez des champs et des types de données; 4. Utilisez InsertInto pour insérer des données, remettre en question les données, mettre à jour les données par mise à jour et supprimer les données par Supprimer. Ce n'est qu'en maîtrisant ces étapes, en apprenant à faire face à des problèmes courants et à l'optimisation des performances de la base de données que vous pouvez utiliser efficacement MySQL.

MySQL peut s'exécuter sans connexions réseau pour le stockage et la gestion des données de base. Cependant, la connexion réseau est requise pour l'interaction avec d'autres systèmes, l'accès à distance ou l'utilisation de fonctionnalités avancées telles que la réplication et le clustering. De plus, les mesures de sécurité (telles que les pare-feu), l'optimisation des performances (choisissez la bonne connexion réseau) et la sauvegarde des données sont essentielles pour se connecter à Internet.

Guide d'optimisation des performances de la base de données MySQL dans les applications à forte intensité de ressources, la base de données MySQL joue un rôle crucial et est responsable de la gestion des transactions massives. Cependant, à mesure que l'échelle de l'application se développe, les goulots d'étranglement des performances de la base de données deviennent souvent une contrainte. Cet article explorera une série de stratégies efficaces d'optimisation des performances MySQL pour garantir que votre application reste efficace et réactive dans des charges élevées. Nous combinerons des cas réels pour expliquer les technologies clés approfondies telles que l'indexation, l'optimisation des requêtes, la conception de la base de données et la mise en cache. 1. La conception de l'architecture de la base de données et l'architecture optimisée de la base de données sont la pierre angulaire de l'optimisation des performances MySQL. Voici quelques principes de base: sélectionner le bon type de données et sélectionner le plus petit type de données qui répond aux besoins peut non seulement économiser un espace de stockage, mais également améliorer la vitesse de traitement des données.

HaDIDB: Une base de données Python évolutive de haut niveau légère HaDIDB (HaDIDB) est une base de données légère écrite en Python, avec un niveau élevé d'évolutivité. Installez HaDIDB à l'aide de l'installation PIP: PiPinStallHaDIDB User Management Créer un utilisateur: CreateUser () pour créer un nouvel utilisateur. La méthode Authentication () authentifie l'identité de l'utilisateur. FromHadidb.OperationMportUserUser_OBJ = User ("Admin", "Admin") User_OBJ.

Il est impossible de visualiser le mot de passe MongoDB directement via NAVICAT car il est stocké sous forme de valeurs de hachage. Comment récupérer les mots de passe perdus: 1. Réinitialiser les mots de passe; 2. Vérifiez les fichiers de configuration (peut contenir des valeurs de hachage); 3. Vérifiez les codes (May Code Hardcode).

MySQL Workbench peut se connecter à MARIADB, à condition que la configuration soit correcte. Sélectionnez d'abord "MariADB" comme type de connecteur. Dans la configuration de la connexion, définissez correctement l'hôte, le port, l'utilisateur, le mot de passe et la base de données. Lorsque vous testez la connexion, vérifiez que le service MARIADB est démarré, si le nom d'utilisateur et le mot de passe sont corrects, si le numéro de port est correct, si le pare-feu autorise les connexions et si la base de données existe. Dans une utilisation avancée, utilisez la technologie de mise en commun des connexions pour optimiser les performances. Les erreurs courantes incluent des autorisations insuffisantes, des problèmes de connexion réseau, etc. Lors des erreurs de débogage, analysez soigneusement les informations d'erreur et utilisez des outils de débogage. L'optimisation de la configuration du réseau peut améliorer les performances

Pour les environnements de production, un serveur est généralement nécessaire pour exécuter MySQL, pour des raisons, notamment les performances, la fiabilité, la sécurité et l'évolutivité. Les serveurs ont généralement un matériel plus puissant, des configurations redondantes et des mesures de sécurité plus strictes. Pour les petites applications à faible charge, MySQL peut être exécutée sur des machines locales, mais la consommation de ressources, les risques de sécurité et les coûts de maintenance doivent être soigneusement pris en considération. Pour une plus grande fiabilité et sécurité, MySQL doit être déployé sur le cloud ou d'autres serveurs. Le choix de la configuration du serveur approprié nécessite une évaluation en fonction de la charge d'application et du volume de données.
