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