Как я могу очистить данные с помощью разбивки на страницы в файле Excel

#python #excel #pandas #web-scraping #beautifulsoup

#python #excel #pandas #веб-очистка #beautifulsoup

Вопрос:

 import requests
from bs4 import BeautifulSoup
from pprint import pprint
import pandas as pd

page = requests.get('https://www.arabam.com/ikinci-el/motosiklet/honda?view=Listamp;take=50')
soup = BeautifulSoup(page.text, 'lxml')
rows = []
kolon = []
for tr in soup.select('tr'):
    row = [td.text.strip() for td in tr.select('td') if td.text.strip() and td.text.strip() != '-']
    if len(row)>6:
        row[7] = row[7][:-98]
        rows.append(row)
   
  
for column in rows[1:]:
    kolon.append(column)



from openpyxl import load_workbook
writer =pd.ExcelWriter('test.xlsx', engine='openpyxl') 
wb  = writer.book
df = pd.DataFrame(kolon)
  df.to_excel(writer, index=False)
  wb.save('test.xlsx')
 

Мы очистили 51 строку информации о мотоцикле с помощью приведенного выше кода с первой страницы в test.xlsx но мы должны получить данные на следующих страницах, и мы не знаем, как добавить эти данные в текущую test.xlsx досье. Как мы можем добавить данные разных страниц к предыдущим данным?

Веб-сайт: https: //www.arabam.com/ikinci-el/motosiklet /honda?view=Listamp;take=50

На первой странице мы очистили эти данные, Вторая страница Страница, которую мы хотим очистить, содержит 51 строку на каждой странице.

Ответ №1:

Сначала вам нужно получить количество страниц, а затем просто перебирать их, чтобы получить ваши таблицы.

Вот как:

 import pandas as pd
import requests
from bs4 import BeautifulSoup

start = 1
response = requests.get(f"https://www.arabam.com/ikinci-el/motosiklet/honda?view=Listamp;take=50amp;page={start}").text
pagination = BeautifulSoup(response, "html.parser").select(".pagination > li")

out = []
for page_number in range(start, len(pagination)):
    url = f"https://www.arabam.com/ikinci-el/motosiklet/honda?view=Listamp;take=50amp;page={page_number}"
    response = requests.get(url).text
    table = BeautifulSoup(response, "html.parser").find("table", {"id": "main-listing"})
    df = pd.concat(pd.read_html(str(table), header=0)).drop("Unnamed: 0", axis=1)
    out.append(df)

df = pd.concat(out, ignore_index=True)
df.to_csv("all_tables.csv", index=False)
 

Это дает вам один файл со всеми табличными данными с каждой страницы.