【发布时间】:2017-09-29 04:56:55
【问题描述】:
我有一堆网络文本,我想抓取并导出到 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()
【问题讨论】:
-
您想从页面上抓取哪些典型的文本片段?
-
您是否可能只需要以下项目?:(1) 计量经济学:2017 年 3 月,第 85 卷,第 2 期 (2) Search for Yield (3) David Martinez‐Miera, Rafael Repullo ( 4) 我们提出了一个实际利率、信用利差与银行体系结构和风险之间关系的模型。银行介于企业家和投资者之间,可以监控企业家的项目。我们描述了固定总储蓄供给的均衡,...
-
其实我只是想要(4)。如果有一种简单的方法可以做到这一点,那就太棒了。
标签: python csv beautifulsoup