Beautifulsoup and Panda - помогите изменить код для многостраничного - PullRequest
0 голосов
/ 05 декабря 2018

Итак, я написал этот код для очистки данных с веб-сайта.

import requests
from bs4 import BeautifulSoup
import re

page = requests.get('https://sofifa.com/shortlist/32931')
soup = BeautifulSoup(page.text, 'html.parser')
dados = soup.find_all('a', href=re.compile("/player/"))
capa = soup.find('article')
capa1 = capa.find('div' , {'class': 'card card-border mb-2 fixed-width'})
time = capa1.find('div' , {'class': 'card-title h5'}).string

records = []
for nomes in dados:
    nome = nomes.string
    records.append((nome))

import pandas as pd
from openpyxl import load_workbook

book = load_workbook('Tabela Pipoco 2019.xlsx')
writer = pd.ExcelWriter('Tabela Pipoco 2019.xlsx', engine='openpyxl')
writer.book = book
writer.sheets = dict((ws.title, ws) for ws in book.worksheets)
df = pd.DataFrame(records, columns=[time])
df.to_excel(writer, "Times", index=False, encoding='utf-8', startcol=0)
writer.save()

Дело в том, что я хотел бы сделать это с 10 различными страницами!Из-за недостатка знаний я написал 10 разных кодов на ноутбуке jupyter и запустил их все.

единственное, что меняется в кодах, как эти две строки:

page = requests.get('https://sofifa.com/shortlist/32931')

и

df.to_excel(writer, "Times", index=False, encoding='utf-8', startcol=0)

Итак, в первой строке мы заменим конечный номер конкретными номерами (32931, 32882, 32589) и т. Д.

Во второй строке то, что изменяетсяstartcol=, это будет (0 для первой страницы, 3 для второй, 6 для третьей и т. Д.)

Как мне поставить thins на один код?

Спасибо, ребята

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018

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

page_list = ['https://sofifa.com/shortlist/32931', 'https://sofifa.com/shortlist/32941',            'https://sofifa.com/shortlist/32931']
page1 = page_list[0]
page2 = page_list[1]
page3 = page_list[2]

Вы можете сделать то же самое для PDF-файла, чтобы превзойти часть

0 голосов
/ 05 декабря 2018

Когда вы написали один и тот же код 3 раза, напишите функцию (с) Дэвид Робинсон

Вы можете заключить код в функцию, которая принимаетдва параметра: url и startcol, затем вызовите эту функцию в цикле для разных входов.Например:

# Define a function
def your_func_to_avoid_writing_the_same_code_ten_times(url, col):
    page = requests.get(url)  
    # ... missed code for better formatting
    df.to_excel(writer, "Times", index=False, encoding='utf-8', startcol=col)
    writer.save()

url_list = ['https://sofifa.com/shortlist/32931', 'https://sofifa.com/shortlist/32882'] # And so on

# Initialize columns counter
col = 0
# Call the function and update the column
for i in range(len(url_list)): 
    print(your_func_to_avoid_writing_the_same_code_ten_times(url_list[i], col))
    col += 3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...