2017-09-28 3 views
4

J'ai réussi à obtenir du code HTML à partir d'un site Web en utilisant HTMLDomParser (http://simplehtmldom.sourceforge.net/):Laravel - Enregistrer HTML réponse Dom-Parser à la base de données

$html = HtmlDomParser::file_get_html('https://example.com/id=1'); 

Il en résulte le code HTML suivant:

<p> ANDE 2, the Atmospheric Neutral Density Experiment 2, is a pair of microsatellites (Castor and Pollux) launched from Cape Canaveral on STS 127 on 15 July 2009 at 22:03 UT and deployed from the payload bay of the shuttle on 30 July 2009 at 17:22 UT.</p> 
 
<p><strong>Launch Date:</strong> 2009-07-15<br/><strong>Launch Vehicle:</strong> Shuttle<br/><strong>Launch Site:</strong> Cape Canaveral, United States<br/></p>

Ce que je veux essayer de faire est de prendre ce HTML et l'enregistrer dans une base de données mySQL. Ainsi, dans la base de données, je vais avoir quatre colonnes:

  • Description de
  • Date de lancement
  • Launch Vehicle
  • Lancement du site

La mise en page HTML restera toujours le même. Mon autre base de données contient les id pour les URL. Je suis en mesure de remplacer le id=1 avec une variable, donc je serais capable de gérer pour enregistrer plusieurs données de page Web.

La seule chose dont je m'inquiète si le id n'existe pas. Serait-il possible d'ignorer cette page si elle ne trouve pas le code HTML recherché? Je n'ai jamais fait cela auparavant, donc je suis un peu débordé par cela. Serait-il même possible de le faire?

Fondamentalement, je veux juste enregistrer des données d'un DomParser dans ma base de données. Comme il n'y a pas eu de réponse, je pense que nous devons aborder cela systématiquement - d'abord, nous devrions essayer de créer la fonction qui enregistre les données dans la base de données.

EDIT 2: Je pensais juste - peut-être la fonction qui doit enregistrer le HTML peut diviser le résultat de HTMLDomParser par étiquette (« forte », « p », etc.) et créer une variable pour chaque colonne puis sauvegardez-le. Je suppose que la question ici est d'abord comment diviser le HTML?

EDIT 3: Comme je n'ai reçu aucune réponse/suggestion, je suppose qu'il est très complexe de l'implémenter. Je n'ai toujours pas réussi à trouver quelque chose qui enregistre le HTML avec succès dans ma base de données.

+0

Que voulez-vous dire par si ID n'existe pas? Si vous avez la base de données avec ID, ne récupérez que les pages correspondant à cet ID. Basé sur ma compréhension du composant simplehtmldom, si vous lui donnez une mauvaise URL et si la route n'existe pas, vous n'obtiendrez pas le code HTML valide. Cela ne serait-il pas suffisant pour que vous fassiez ce que vous voulez faire? – Andy

+0

@Andy Disons que j'ai les ID 1, 2, 3 dans ma base de données. Mais le site n'a pas de page sur l'identifiant 2 par exemple, j'obtiendrais une erreur 404. Vous avez raison en ce qui concerne le fait que je ne chercherai que les pages qui correspondent à l'identifiant. La seule chose est que certains 'id' que j'ai dans ma base de données pourraient ne pas exister dans le site Web, donc je veux voir s'il est possible de gérer cela. – spacetravel

+1

Dans ce cas, que diriez-vous d'utiliser GuzzleHttp pour lire l'URL pour vérifier le code d'état? Si le code d'état est 200 alors c'est la page valide pour récupérer des données sinon ne pas lire cette URL? Ou vous pouvez utiliser try/catch dans votre boucle et quand vous avez une exception ... juste l'ignorer et passer à l'itération suivante? – Andy

Répondre

0

Pour vérifier si l'ID est valide pour le site, je suggère une fonction curl, donc si $ url existe, essayez d'obtenir les données (essayez et attrapez), s'il y a une erreur avec les données, attrapez-le et retourner la réponse appropriée ou l'enregistrer et passer à la prochaine URL valide.

Vous devrez formater les données avec une fonction séparée à l'intérieur de l'essai.

Espérons que cela va de pair avec la méthodologie, bonne chance. Paix