я сделал уборку. во-первых, почему тип байтов? ты пишешь текст. тогда почему аськи? пожалуйста, используйте Unicode. если позже в вашем коде вам действительно нужно кодировать ascii в ascii, тогда. использование findAll
устарело, используйте find_all
. у вас также была возможная проблема с запятыми в значении поверхности наконец, всегда используйте контекстные менеджеры, когда это возможно (здесь: работа с файлами)
и теперь по вашему вопросу у вас было две проблемы:
- ваш тест
if len(saverec)!=0:
был в цикле for, генерируя лоты
бесполезных данных.
- вы не удалили данные из ненужных пробелов
.
import urllib
import urllib.request
from bs4 import BeautifulSoup
import os
def make_soup(url):
thepage=urllib.request.urlopen(url)
soupdata=BeautifulSoup(thepage,"html.parser")
return soupdata
save=""
for num in range(0, 22):
soup=make_soup("http://www.ceetrus.com/fr/implantations-sites-commerciaux?page="+str(num))
for rec in soup.find_all('tr'):
saverec=""
for data in rec.find_all('td'):
data = data.text.strip()
if "," in data:
data = data.replace(",", "")
saverec=saverec+","+data
if len(saverec)!=0:
save=save+"\n"+saverec[1:]
print('#%d done' % num)
headers="Nom_commercial_du_Site,Ville,Etat,Surface_GLA,Nombre_de_boutique,Contact"
with open(os.path.expanduser("sites_commerciaux.csv"), "w") as csv_file:
csv_file.write(headers)
csv_file.write(save)
который выводит для первой страницы:
Nom_commercial_du_Site,Ville,Etat,Surface_GLA,Nombre_de_boutique,Contact
ALCORCÓN,ALCORCÓN - MADRID,Ouvert,4298 m²,40,José Carlos GARCIA
Alegro Alfragide,CARNAXIDE,Ouvert,11461 m²,122,
Alegro Castelo Branco,CASTELO BRANCO,Ouvert,6830 m²,55,
Alegro Setúbal,Setúbal,Ouvert,27000 m²,114,
Ancona,Ancona,Ouvert,7644 m²,41,Ettore PAPPONETTI
Angoulême La Couronne,LA COURONNE,Ouvert,6141 m²,45,Juliette GALLOUEDEC
Annecy Grand Epagny,EPAGNY,Ouvert,20808 m²,61,Delphine BENISTY
Anping,Tainan,Ouvert,969 m²,21,Roman LEE
АКВАРЕЛЬ,Volgograd,Ouvert,94025 m²,182,Viktoria ZAITSEVA
Arras,ARRAS,Ouvert,4000 m²,26,Anais NIZON