Скребущий веб-стол с нумерацией страниц и питон-пандами - PullRequest
0 голосов
/ 01 июля 2018

Я новичок в python pandas, я пытаюсь очистить разбитую на страницы таблицу, используя красивую упаковку супа, данные очищаются, но содержимое каждой ячейки находится в одной строке, я не могу получить связный файл csv

вот мой код:

import urllib
import urllib.request
from bs4 import BeautifulSoup
import os

file=open(os.path.expanduser("sites_commerciaux.csv"), "wb")

def make_soup(url):
    thepage=urllib.request.urlopen(url)
    soupdata=BeautifulSoup(thepage,"html.parser")
    return soupdata


headers="Nom_commercial_du_Site,Ville,Etat,Surface_GLA,Nombre_de_boutique,Contact"
file.write(bytes(headers,encoding='ascii',errors='ignore'))
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.findAll('tr'):
        saverec=""
        for data in rec.findAll('td'):
            saverec=saverec+","+data.text
            if len(saverec)!=0:
             save=save+"\n"+saverec[1:]

file.write(bytes(save,encoding='ascii',errors='ignore'))

Может кто-нибудь помочь мне исправить это, пожалуйста

1 Ответ

0 голосов
/ 01 июля 2018

я сделал уборку. во-первых, почему тип байтов? ты пишешь текст. тогда почему аськи? пожалуйста, используйте Unicode. если позже в вашем коде вам действительно нужно кодировать ascii в ascii, тогда. использование findAll устарело, используйте find_all. у вас также была возможная проблема с запятыми в значении поверхности наконец, всегда используйте контекстные менеджеры, когда это возможно (здесь: работа с файлами)

и теперь по вашему вопросу у вас было две проблемы:

  1. ваш тест if len(saverec)!=0: был в цикле for, генерируя лоты бесполезных данных.
  2. вы не удалили данные из ненужных пробелов

.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...