tutorial scraping examples code python csv beautifulsoup line-breaks

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.