【问题标题】:How to fix: getting rid of \n'] breaks my output?如何解决:摆脱 \n'] 会破坏我的输出?
【发布时间】:2020-07-08 10:49:51
【问题描述】:

愚蠢的问题。我制作了我的第一个 scraper/crawler。它给了我我想要的东西,但是当我将它写入 csv 文件时,文本出现在 \n'] 括号中。如果我尝试以任何方式删除它 - 它会破坏我在 csv 文件中的输出。 尽管该网站是希伯来语的,但应该不成问题。看看你得到的 csv 。 提前致谢

import csv
import requests
from bs4 import BeautifulSoup as bs
import io

url='https://www.maariv.co.il/news/politics'
source = requests.get(url).text
soup = bs(source, 'html.parser')


file = io.open('maariv7.csv', 'w', encoding="utf-16")
csv_writer = csv.writer(file, delimiter='|')
csv_writer.writerow(['Headline', 'Summary', 'Text', 'name'])
file.close()  

def single_page_scraper(url):
    source = requests.get(url).text
    soup = bs(source, 'html.parser')
    
    file = io.open('maariv7.csv', 'a', encoding="utf-16")
    csv_writer = csv.writer(file, delimiter='|')
    
    for article in soup.find_all(class_='article-title'):
        headline = article.h1.text
        print (headline,'\n')
    
        for article in soup.find_all(class_='article-description'):
                summary = article.h2.text
                print(summary,'\n')
    
                text=[]
                name=[]
                for par in soup.find_all(class_='article-body'):            
                    text.append(par.get_text())
                    print(text)

                politics = io.open('politicians.txt', 'r', encoding="utf-8")
                my_list=politics.read().splitlines()
                my_file=str(text)            
                for i in my_list: 
                    if i in my_file:
                        name.append(i)

    name_list = ", ".join(name)         
    print(name_list,'\n''\n''\n''\n')           
    csv_writer.writerow([headline, summary, my_file, name_list])
    file.close()   
    
for articles in soup.find_all(class_='three-articles-in-row'):
    link = articles.a['href']  
    single_page_scraper(link)

【问题讨论】:

  • 这一行出现错误:politics = io.open('politicians.txt', 'r', encoding="utf-8"),并且该文件不存在.
  • 没有运行程序的能力,很难看到发生了什么。也许csv_writer.writerow([headline.strip(), summary.strip(), my_file.strip(), name_list.strip()]) 会有所帮助?
  • 他们实际上是在他们的文本中添加换行符,所以你应该在你附加文本的地方去掉它们:而不是 text.append(par.get_text()) 添加条带 text.append(par.get_text())

标签: python python-3.x csv web-scraping beautifulsoup


【解决方案1】:

查看底部的Yibo Yang's 答案。

基本上,换行试试:

    csv_writer = csv.writer(file, delimiter='|')

到这里:

    csv_writer = csv.writer(file, delimiter='|', newline='')

看看会不会有影响。

【讨论】:

    【解决方案2】:

    所以,在single_page_scraper 内部我使用 他们实际上是在他们的文本中添加换行符,所以你应该在附加文本的地方去掉它们:而不是 text.append(par.get_text()) 添加条带 text.append(par.get_text())

    for par in soup.find(class_='article-body'):
                        if isinstance(par, NavigableString):
                            t = par.strip()
                        else:
                            t = par.text.strip()
                        if t != '':
                            text.append(t)
    

    编辑:你必须from bs4 import NavigableString

    【讨论】:

      猜你喜欢
      • 2020-01-21
      • 2011-04-29
      • 2013-01-04
      • 1970-01-01
      • 1970-01-01
      • 2017-02-15
      • 2023-03-19
      • 2021-05-19
      • 1970-01-01
      相关资源
      最近更新 更多