Python 美化组到csv:将文本段落放在一行中

Python 美化组到csv:将文本段落放在一行中,python,csv,beautifulsoup,Python,Csv,Beautifulsoup,我有一堆web文本,我想将它们刮取并导出到csv文件中。问题是网站上的文本被分成了多行,这就是beautifulsoup的阅读方式。当我导出到csv时,所有文本进入一个单元格,但该单元格有多行文本。当我尝试将csv读入另一个程序时,它会以一种产生无意义数据集的方式解释多行内容。问题是,在使用beautifulsoup拉取所有文本后,但在导出到csv之前,如何将其放在一行中 下面是一个简单的工作示例,演示了多行的问题事实上,生成的csv中的前几行是空的,因此乍一看可能是空的: import csv

我有一堆web文本,我想将它们刮取并导出到csv文件中。问题是网站上的文本被分成了多行,这就是beautifulsoup的阅读方式。当我导出到csv时,所有文本进入一个单元格,但该单元格有多行文本。当我尝试将csv读入另一个程序时,它会以一种产生无意义数据集的方式解释多行内容。问题是,在使用beautifulsoup拉取所有文本后,但在导出到csv之前,如何将其放在一行中

下面是一个简单的工作示例,演示了多行的问题事实上,生成的csv中的前几行是空的,因此乍一看可能是空的:

import csv
import requests
from bs4 import BeautifulSoup

def main():
    r = requests.get("https://www.econometricsociety.org/publications/econometrica/2017/03/01/search-yield")
    soup = BeautifulSoup(r.text,"html.parser")
    with open('Temp.csv', 'w', encoding='utf8', newline='') as f:
        writer = csv.writer(f,delimiter=",")
        abstract=soup.find("article").text
        writer.writerow([abstract])

if __name__ == '__main__':
    main()
更新:有一些很好的建议,但仍然不起作用。以下代码仍然会生成一个csv文件,其中单元格中有换行符:

import csv    
import requests
from bs4 import BeautifulSoup

with open('Temp.csv', 'w', encoding='utf8', newline='') as f:
    writer = csv.writer(f,delimiter=',')
    r = requests.get("https://www.econometricsociety.org/publications/econometrica/2017/03/01/search-yield")
    soup = BeautifulSoup(r.text,'lxml') 
    find_article = soup.find('article')
    find_2para = find_article.p.find_next_sibling("p")
    find_largetxt = find_article.p.find_next_sibling("p").nextSibling
    writer.writerow([find_2para,find_largetxt])
下面是另一个基于不同建议的尝试。这一个也会在csv文件中产生换行符:

import csv
import requests
from bs4 import BeautifulSoup

def main():
    r = requests.get("https://www.econometricsociety.org/publications/econometrica/2017/03/01/search-yield")
    soup = BeautifulSoup(r.text,"html.parser")
    with open('Temp.csv', 'w', encoding='utf8', newline='') as f:
        writer = csv.writer(f,delimiter=",")
        abstract=soup.find("article").get_text(separator=" ", strip=True)
        writer.writerow([abstract])

if __name__ == '__main__':
    main()
更改您的摘要=。。。分为:

abstract = soup.find("article").get_text(separator=" ", strip=True)
它将使用separator参数分隔每一行。在本例中,它将用一个空格分隔字符串

r = requests.get("https://www.econometricsociety.org/publications/econometrica/2017/03/01/search-yield")
soup = BeautifulSoup(r.text,'lxml') # I prefer using xml parser
find_article = soup.find('article')
# Next line how to find The title in this case: Econometrica: Mar 2017, Volume 85, Issue 2
find_title = find_article.h3
# find search yeild 
find_yeild = find_article.h1
#first_paragraph example : DOI: 10.3982/ECTA14057       p. 351-378
find_1para =  find_article.p
#second p example : David Martinez‐Miera, Rafael Repullo  
find_2para = find_article.p.find_next_sibling("p")
#find the large text area using e.g. 'We present a model of the relationship bet...'
find_largetxt = find_article.p.find_next_sibling("p").nextSibling
我使用了多种方法到达你想要的文本区域,只是为了教育你可以使用。在每种方法上使用文本来获得没有标签的文本,或者你可以使用Zroq的方法。 但您可以通过执行以下操作将其中的每一项写入文件:例如

writer.writerow(find_title.text)

最终对我有效的解决方案非常简单:

abstract=soup.find("article").text.replace("\t", "").replace("\r", "").replace("\n", "")

这就消除了所有的换行符。

您想从页面中刮取的典型文本片段是什么?您是否只需要以下项目?:1《计量经济学》:2017年3月,第85卷,第2期2搜索收益率3 David Martinez‐Miera,Rafael Repello 4我们提出了实际利率、信用利差和银行系统结构与风险之间关系的模型。银行是企业家和投资者之间的中介,可以监控企业家的项目。我们描述了储蓄的固定总供给的均衡,…实际上,我只想要4。如果有一个简单的方法可以做到这一点,那就太棒了。这看起来确实更好,但由于某些原因,p。第351-378页。351-378,这又会引起问题。这非常有效,谢谢!虽然仅供参考,我不得不用下划线替换find.article中的句点。是的,对不起,我现在就开始:,如果一切正常,请不要忘记将问题标记为已回答。不幸的是,它仍然不能正常工作。当我写入csv时,条目仍然被分割到多行,从而导致问题。以下是我为csv编写器部分编写的内容。另外,它不允许我添加.text,抱怨“NavigableString”对象没有属性“text”,打开“Temp.csv”,“w”,encoding='utf8',newline=as f:writer=csv.writer,delimiter=,writer.writerow[find_2para,find_largetxt],如果我不忘的话,我以后会看一看。也许是我们朋友的代码起作用,试试看。你是说Zroq吗?我尝试在find_LarGetText和find_2para的末尾添加.nextSibling.get_textseparator=,strip=True,但得到相同的“Navigablesting”对象没有属性“get_text”错误。。。