Beautifulsoup - get_text,输出一行

时间:2015-09-30 01:51:09

标签: python csv beautifulsoup line-breaks

我正在尝试提取下一页的文本并将其保存到CSV文件的单个单元格中。但是,我一直在我看不到任何“特殊”字符的地方(即使在文本中没有“\ n”,“\ t”等)的地方也会遇到换行符。 CSV文件的第二行也有多个非空单元格,而不是仅将文本保存到单个单元格中。

以下是代码:

# -*- coding: utf-8 -*-
#Python3.x
import urllib
from bs4 import BeautifulSoup
import requests, urllib, csv, re, sys
csvfile=open('test.csv', 'w', encoding='cp850', errors='replace')
writer=csv.writer(csvfile)

list_url= ["http://www.sec.gov/Archives/edgar/data/1025315/0000950127-05-000239.txt"]

for url in list_url:
 base_url_parts = urllib.parse.urlparse(url)
 while True:
    raw_html = urllib.request.urlopen(url).read()
    soup = BeautifulSoup(raw_html)

    #### scrape the page for the desired info 
    text_10k=[]
    ten_k=soup.get_text()
    ten_k=ten_k.strip().replace("\t", " ").replace("\r", " ").replace('\n', ' ')
    text_10k.append(ten_k)    

#Zip the data
    output_data=zip([text_10k])

#Write the observations to the CSV file
    writer=csv.writer(open('test_10k.csv','a',newline='', encoding='cp850', errors='replace'))
    writer.writerows(output_data)
    csvfile.flush()

我确信我的错误很简单,但是自从我使用Python以来已经好几个月......我绝对可以使用复习。非常感谢!

编辑:输出太长而无法完整复制,但这是一个例子:

第1行,第1单元:['-----开始隐私增强的消息----- \ nProc-Type ..... -8-“,'工作帽的变化
第2行,单元格1:tal主要归因于\ n年的损失 第2行,第2单元:以及因应付长期票据而支付的现金减少。\ n \ n

我希望所有内容都在一个单元格中(第1行,单元格1),没有换行符。所以:
第1行,单元格1:['-----开始隐私增强的消息----- \ nProc-Type ..... -8-“,'工作捕获的变化主要归因于损失由于支付长期票据而导致的现金减少。\ n \ n

*请注意,当在第1行和第2行之间拆分时,“大写”一词中的“i”会丢失。不确定是什么原因导致该行以这种方式破解。

EDIT2:我通过保存为.txt文件使其工作(只要我在Notepad ++或类似的东西中打开输出就可以正常工作)。我仍然不知道为什么它不能用作CSV。

1 个答案:

答案 0 :(得分:0)

似乎在While True:中,程序最终会永远停留在while循环中。将其更改为if url:应该让它每个网址运行一次。我应该注意,直到我添加' lxml'作为BeautifulSoup soup = BeautifulSoup(raw_html, 'lxml')的解析器。这似乎将每个网址的信息放入一个单元格中。由于单元格中的信息量太大,因此很可能无法在标准电子表格中显示。

# -*- coding: utf-8 -*-
# Python3.x
from bs4 import BeautifulSoup
import urllib
import csv

csvfile = open('test.csv', 'w', encoding='cp850', errors='replace')
writer = csv.writer(csvfile)

list_url = ["http://www.sec.gov/Archives/edgar/data/1025315/0000950127-05-000239.txt"]

for url in list_url:
    base_url_parts = urllib.parse.urlparse(url)
    if url:
        raw_html = urllib.request.urlopen(url).read()
        soup = BeautifulSoup(raw_html, 'lxml')

        #### scrape the page for the desired info
        text_10k = []
        ten_k = soup.get_text()
        ten_k = ten_k.strip().replace("\t", " ").replace("\r", " ").replace('\n', ' ')
        text_10k.append(ten_k)

        #Zip the data
        output_data=zip([text_10k])

        #Write the observations to the CSV file
        writer=csv.writer(open('test_10k.csv','a',newline='', encoding='cp850', errors='replace'))
        writer.writerows(output_data)
        csvfile.flush()