beautifulsoup to csv:将文本段落放入一个lin中

2024-07-01 06:17:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一堆网页文本,我想刮和导出到一个csv文件。问题是网站上的文本被分成多行,这就是beauthoulsoup阅读它的方式。当我导出到csv时,所有的文本都进入一个单元格,但是单元格有多行文本。当我试图将csv读入另一个程序时,它以一种产生无意义数据集的方式解释多行。但是在把uspi和uspi放进统一的文本输出之前,怎样才能把它变成一个问题呢?在

下面是一个简单的工作示例,演示了多行的问题(事实上,结果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文件:

^{pr2}$

这是另一个基于不同建议的尝试。这个结果也会在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()

Tags: 文件csvtextfrom文本importabstractget
3条回答
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

我使用了各种方法来访问你想要的文本区域,仅仅是为了教育目的(你可以使用.text来获得没有标签的文本,或者你可以使用Zroq的方法)。 但是,您可以通过以下方式将其中的每一个写入到文件中,例如

^{pr2}$

abstract = ...行改为:

abstract = soup.find("article").get_text(separator=" ", strip=True)

它将使用separator参数分隔每一行(在本例中,它将用一个空格分隔字符串)。在

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

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

这样可以消除所有的断线。在

相关问题 更多 >

    热门问题