2017-10-17 33 views
0

Donc, mon but est d'analyser les données d'un site Web et de stocker ces données sur un fichier texte formaté pour être ouvert dans Excel. Voici le code:l'analyse des données avec BeautifulSoup et les données sotring avec pandas DataFrame to_csv

from bs4 import BeautifulSoup 
import requests 
import pprint 
import re 
import pyperclip 
import json 
import pandas as pd 
import csv 

pag = range (2,126) 
out_file=open('bestumbrellasoffi.txt','w',encoding='utf-8') 
with open('bestumbrellasoffi.txt','w', encoding='utf-8') as file: 
    for x in pag: 
    #iterate pages 
     url = 'https://www.paginegialle.it/ricerca/lidi%20balneari/italia/p- 
     '+str(x)+'?mr=50' 
     response = requests.get(url) 
     soup = BeautifulSoup(response.content, "html.parser") 
      #parse data 
     for i,j,k,p,z in zip(soup.find_all('span', attrs= 
{'itemprop':'name'}),soup.find_all('span', attrs= 
{'itemprop':'longitude'}),soup.find_all('span', attrs= 
{'itemprop':'latitude'}),soup.find_all('span', attrs={'class':'street- 
address'}), soup.find_all('div', attrs={'class':'tel elementPhone'})): 
      info=i.text,j.text,k.text,p.text,z.text 
      #check if data is good 
      print(url) 
      print (info) 
      #create dataframe 
      raw_data = { 'nome':[i],'longitudine':[j],'latitudine': 
      [k],'indirizzo':[p],'telefono':[z]} 
      print(raw_data) 
      df=pd.DataFrame(raw_data, columns = 
       ['nome','longitudine','latitudine','indirizzo','telefono']) 
      df.to_csv('bestumbrellasoffi.txt') 


out_file.close() 

Il y a tous ces modules parce que je l'ai fait beaucoup essayer. de sorte que la sortie de impression (info) is

la sortie impression (raw_data) is

EDIT

Ce code révisé et fonctionne parfaitement.

Merci à tous pour votre patience!

from bs4 import BeautifulSoup 

import demande import pprint import re import pyperclip import json pandas d'importation que pd import csv

pag = Zone (2126) avec open ('bestumbrellasoffia.txt', » a », encoding = 'utf-8') sous forme de fichier:

for x in pag: 
#iterate pages 
    url = 'https://www.paginegialle.it/ricerca/lidi%20balneari/italia/p-'+str(x)+'?mr=50' 
    response = requests.get(url) 
    soup = BeautifulSoup(response.content, "html.parser") 
    raw_data = { 'nome':[],'longitudine':[],'latitudine':[],'indirizzo':[],'telefono':[]} 
    df=pd.DataFrame(raw_data, columns = ['nome','longitudine','latitudine','indirizzo','telefono']) 
     #parse data 
    for i,j,k,p,z in zip(soup.find_all('span', attrs={'itemprop':'name'}),soup.find_all('span', attrs={'itemprop':'longitude'}),soup.find_all('span', attrs={'itemprop':'latitude'}),soup.find_all('span', attrs={'class':'street-address'}), soup.find_all('div', attrs={'class':'tel elementPhone'})): 
     inno=i.text.lstrip() 
     ye=inno.rstrip() 
     info=ye,j.text,k.text,p.text,z.text 
     #check if data is good 
     print(info) 
     #create dataframe 
     raw_data = { 'nome':[i],'longitudine':[j],'latitudine':[k],'indirizzo':[p],'telefono':[z]} 
     #try dataframe 
     #print(raw_data) 
     file.write(str(info)+"\n") 
+0

Bienvenue chez SO. Quelle est la question? S'il vous plaît, prenez le temps de lire [ask] et les liens qu'il contient. – wwii

+0

merci @wwii, et désolé d'être peu clair –

Répondre

0

Vous initialisant une nouvelle trame de données chaque itération de votre boucle for.

Vous devez l'initialiser en dehors de la boucle, puis utiliser append() dans votre boucle pour ajouter chaque ligne de données.

+0

merci cela m'a aidé! Je suis en train d'éditer la question avec le code qui fonctionne :) –