Python: как добавить столбец над файлом Excel xlsx при сканировании данных с помощью BeautifulSoup - PullRequest
0 голосов
/ 14 января 2020

Привет, я новичок в коде ie и я пытаюсь получить заголовки новостей с cnn.com, как и изображение файла Excel, прилагаемое ниже.

Однако проблема в том, что я не Не знаю, как добавить каждый столбец, например, World / Politics / Health, и мой код получает данные только из элемента LAST списка кортежей (в этом коде «policy»).

Итак, вот мой код. Заранее спасибо!

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from bs4 import BeautifulSoup
import requests
import time
import pandas as pd
import os
from bs4 import BeautifulSoup as soup
from bs4 import NavigableString
import re
import xlsxwriter
from openpyxl import Workbook


path = "C:/Users/Desktop/chromedriver.exe"
driver = webdriver.Chrome(path)

# per section

a =['world','health','politics']
wb = Workbook()
ws = wb.active

for i in a:
    nl = []
    driver.get("https://edition.cnn.com/"+str(i))
    driver.implicitly_wait(3)
    html = driver.page_source
    soup = BeautifulSoup(html, "lxml")
    find_ingre = soup.select("span.cd__headline-text")

    for i in find_ingre:
        nl.append(i.get_text())

# make dataframe --> save xlsx

import pandas as pd
from pandas import Series, DataFrame

df = pd.DataFrame(nl)
df.to_excel("cnn_recent_topics.xlsx",index=False)

результат сейчас ---> result now

результат, который я хочу получить ---> result that I want to get

1 Ответ

1 голос
/ 14 января 2020

Не могли бы вы попробовать это, прокомментируйте, если вам нужно объяснение:

def custom_scrape(topic):
    nl = []
    driver.get("https://edition.cnn.com/"+str(topic))
    driver.implicitly_wait(3)
    html = driver.page_source
    soup = BeautifulSoup(html, "lxml")
    find_ingre = soup.select("span.cd__headline-text")

    for i in find_ingre:
        nl.append(i.get_text())


    return nl

topics =['world','health','politics']
result = pd.DataFrame()
for topic in topics:
    temp_df = pd.DataFrame(nl)
    temp_df.columns = [topic]
    result = pd.concat([result, temp_df], ignore_index=True, axis=1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...