簡體   English   中英

將新聞寫入 CSV 文件(Python 3,BeautifulSoup)

[英]Writing the news to CSV-file (Python 3, BeautifulSoup)

我希望 Python3.6 將以下代碼的輸出寫入 csv。 像這樣擁有它會非常好:每篇文章都有一行(它是新聞網站),四列包含“標題”、“URL”、“類別”[#Politik 等]、“PublishedAt”。

from bs4 import BeautifulSoup
import requests

website = 'http://spiegel.de/schlagzeilen'
r = requests.get(website)
soup = BeautifulSoup((r.content), "lxml")

div = soup.find("div", {"class": "schlagzeilen-content schlagzeilen-overview"})

for a in div.find_all('a', title=True):
    print(a.text, a.find_next_sibling('span').text)
    print(a.get('href'))

為了寫入csv,我已經有了這個......

with open('%s_schlagzeilen.csv' % datetime.datetime.now().strftime('%Y-%m-%d_%H-%M-%S.%f'), 'w', newline='',
              encoding='utf-8') as file:
        w = csv.writer(file, delimiter="|")
        w.writerow([...])

..並且需要知道接下來要做什么。 謝謝!! 提前!

您可以將所有需要提取的字段收集到字典列表中,並使用csv.DictWriter寫入 CSV 文件:

import csv
import datetime

from bs4 import BeautifulSoup
import requests


website = 'http://spiegel.de/schlagzeilen'
r = requests.get(website)
soup = BeautifulSoup((r.content), "lxml")

articles = []
for a in soup.select(".schlagzeilen-content.schlagzeilen-overview a[title]"):
    category, published_at = a.find_next_sibling(class_="headline-date").get_text().split(",")

    articles.append({
        "Title": a.get_text(),
        "URL": a.get('href'),
        "Category": category.strip(" ()"),
        "PublishedAt": published_at.strip(" ()")
    })

filename = '%s_schlagzeilen.csv' % datetime.datetime.now().strftime('%Y-%m-%d_%H-%M-%S.%f')
with open(filename, 'w', encoding='utf-8') as f:
    writer = csv.DictWriter(f, fieldnames=["Title", "URL", "Category", "PublishedAt"], )

    writer.writeheader()
    writer.writerows(articles)

請注意我們如何定位類別和“發布於”——我們需要轉到下一個同級元素並用逗號分隔文本,去掉額外的括號。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM