为了账号安全,请及时绑定邮箱和手机立即绑定

写入 csv 文件会在其自己的单元格中输出每个字母

写入 csv 文件会在其自己的单元格中输出每个字母

aluckdog 2021-11-16 15:40:16
import bs4 as bsimport urllib.requestimport csvsource =    urllib.request.urlopen('http://www.thebest100lists.com/best100actors/').read()soup = bs.BeautifulSoup(source, 'lxml')for paragraph in soup.find_all('ol'):    celebList = paragraph.text    print(celebList)with open('celebList.csv', 'w', newline='') as f:    writer = csv.writer(f)writer.writerow[soup.title.string]for i in celebList:    writer.writerow([i])我正在玩漂亮的汤 4 从网站上的列表中抓取数据以将其输出到 .csv 文件。我已经正确地抓取了我正在寻找的数据,但是当我保存运行程序时,csv 文件在一行的自己的单元格中包含每个字母。我曾尝试将数据转换为字符串,我也尝试将 (i) 放在方括号中,但它对我不起作用。
查看完整描述

3 回答

?
繁星coding

TA贡献1797条经验 获得超4个赞

我认为使用 a 标签的类选择器来获得一个没有间隙的列表然后用熊猫转储到 csv 会更有效


from bs4 import BeautifulSoup

import requests

import pandas as pd


url = 'http://www.thebest100lists.com/best100actors/'

res = requests.get(url)

soup = BeautifulSoup(res.content, "lxml")

names = [name.text for name in soup.select('a.class1')]

df = pd.DataFrame(names,columns=['Names'])

df.to_csv(r'C:\Users\User\Desktop\Celebs.csv', sep=',', encoding='utf-8',index = False )


查看完整回答
反对 回复 2021-11-16
?
MMMHUHU

TA贡献1834条经验 获得超8个赞

你可以这样做:


celeblistsplit=celebList.split('\n')

celeblistsplit

进而:


f=open('output.csv','w')

for each in celeblistsplit:

    if len(each)>0:

        f.write(each)

        f.write(',')

        f.write('\n')

f.close()

结果文件:


Robert De Niro,

Al Pacino,

Tom Hanks,

Johnny Depp,

Jack Nicholson,

Marlon Brando,

Meryl Streep,

Leonardo DiCaprio,

...


查看完整回答
反对 回复 2021-11-16
?
一只萌萌小番薯

TA贡献1795条经验 获得超7个赞

import bs4 as bs

import urllib.request

import csv


source = urllib.request.urlopen('http://www.thebest100lists.com/best100actors/').read()


soup = bs.BeautifulSoup(source, 'lxml')


celebList = []     # an empty list to store the text

for paragraph in soup.find_all('ol'):

    celebList.append(paragraph.text)

    # print(celebList)


# file writing

# print(celebList) # ["\nRobert De Niro\n\nAl Pacino\n\nTom Hanks\n\nJohnny .. ] 

celebList = map(lambda s: s.strip(), celebList)   # removing the leading spaces in the list

celebList = list(celebList)



with open('celebList.csv', 'w') as file:

    for text in celebList:

        file.write(text)

输出:


Robert De Niro


Al Pacino


Tom Hanks


Johnny Depp


Jack Nicholson


Marlon Brando


.

.

.


查看完整回答
反对 回复 2021-11-16
  • 3 回答
  • 0 关注
  • 230 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信