python - scraping - Beautifulsoup-get_text, salida en una sola línea
scraping python 3 (1)
Parecería que en While True:
el programa terminaría atrapado en un ciclo while para siempre. Cambiando eso a if url:
debería dejarlo correr una vez por url. Debo señalar que no se ejecutará hasta que agregue ''lxml'' como analizador para BeautifulSoup soup = BeautifulSoup(raw_html, ''lxml''
). Esto parece poner la información de cada url en una sola celda. Debido a que la cantidad de información en la celda es tan grande, es probable que no se pueda mostrar en una hoja de cálculo estándar.
# -*- 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()
Estoy tratando de extraer el texto de la página siguiente y guardarlo en una sola celda de un archivo CSV. Sin embargo, sigo recibiendo saltos de línea en lugares donde no veo ningún carácter "especial" (es decir, incluso cuando no hay "/ n", "/ t", etc. en el texto). La segunda línea del archivo CSV también tiene más de una celda no vacía, en lugar de guardar el texto en una sola celda.
Aquí está el código:
# -*- 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()
Estoy seguro de que mi error es simple, pero han pasado meses desde que utilicé Python ... Definitivamente podría utilizar un repaso. ¡Muchas gracias!
EDITAR: El resultado es demasiado largo para copiarlo por completo, pero aquí hay un ejemplo:
Línea 1, Celda 1: [''----- COMIENZA EL MENSAJE MEJORADO EN PRIVACIDAD ----- / nTipo de proyecto ..... -8- ",'' El cambio en el límite de trabajo
Línea 2, Celda 1: tal es atribuible principalmente a la pérdida de / naño
Línea 2, Celda 2: y la reducción en efectivo debido a los pagos realizados en pagarés a largo plazo pagaderos. / N / n
Me gustaría que todo esté en una sola celda (Línea 1, celda 1), sin caracteres linebreak. Asi que:
Línea 1, Celda 1: [''----- COMIENZA EL MENSAJE MEJORADO EN PRIVACIDAD ----- / nTipo de proyecto ..... -8- ",'' El cambio en el captal de trabajo se debe principalmente a la pérdida por el / ny la reducción del efectivo debido a pagos efectuados en pagarés a largo plazo pagaderos. / n / n
* Tenga en cuenta que una "i" se pierde en la palabra "capital" cuando se divide entre las líneas 1 y 2. No estoy seguro de qué hace que la línea se rompa de esta manera.
EDIT2: Hice que funcione guardando como un archivo .txt (que funciona bien siempre que abra el resultado en Notepad ++ o algo similar). Todavía no sé por qué no funcionaría como CSV, sin embargo.