#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)
Это дает вам один файл со всеми табличными данными с каждой страницы.