繁体   English   中英

使用 Beautiful Soup 从抓取的数据中写入 CSV 文件

[英]Write CSV file from scraped data with Beautiful Soup

这就是我使用 Beautifulsoup 抓取数据的方式。

comments =[]
users_list = []
users = driver.find_elements_by_class_name('_6lAjh')

for user in users:
    users_list.append(user.text)

i = 0
texts_list = []
texts = driver.find_elements_by_class_name('C4VMK')

for txt in texts:
    texts_list.append(txt.text.split(users_list[i])[1].replace("\r"," ").replace("\n"," "))
    i += 1
    comments_count = len(users_list)

for i in range(1, comments_count):
    user = users_list[i]
    text = texts_list[i]
    print("User ",user)
    print("Text ",text)
    print()
    comments.append(users_list[i])
    comments.append(texts_list[i])
    idxs = [m.start() for m in re.finditer('@', text)]
    for idx in idxs:
        handle = text[idx:].split(" ")[0]

print(handle)

这是我拥有的文本数据,包括用户名、评论和来自 instagram 的点赞数。 ' heyyy 3w1 likeReply' -> 'heyyy' 是这里的评论,3w 表示该评论是 3 周前写的,1 个喜欢是点赞数

print(comments)
['User1',
 ' 😱 3w1 likeReply',
 'User2',
 ' 💖 3w1 likeReply',
 'User3',
 ' Looking good! Collab, DM "bruteimpact.fashion 3wReply',
 'User4',
 ' heyyy 3w5 likeReply']

我想将其保存到如下所示的 CSV 文件中(三列 - ID、评论、likes_count):

ID  Comments  likes_count
User1 😱       0
User2 💖       1
User3 Looking good! Collab, DM "bruteimpact.fashion  0
User4 heyyy    5

到目前为止,这是我编写的代码,但与我想要的结果相去甚远,我根本不知道如何到达最终目的地。 另外,我不知道如何通过从我拥有的评论数据中分离喜欢的数量来制作单独的“likes_count”。 但是,我会对只有“ID”和“文本”列而没有“likes_count”的 CSV 文件感到满意。 请帮我!

fields = ["User", "Text"]
rows = [comments]
filename = "insta_records.csv"
with open(filename, 'w', encoding='utf-8') as csvfile: 
    csvwriter = csv.writer(csvfile) 
    csvwriter.writerow(fields) 
    csvwriter.writerows(rows) 

您有平面列表,因此您可以使用zip对用户及其评论进行分组

comments = ['User1',
 ' 😱 3w1 likeReply',
 'User2',
 ' 💖 3w1 likeReply',
 'User3',
 ' Looking good! Collab, DM "bruteimpact.fashion 3wReply',
 'User4',
 ' heyyy 3w5 likeReply']

rows = []
for user, text in zip(comments[::2], comments[1::2]):
    print(user, text)
    #rows.append([user, text])


fields = ["User", "Text"]
filename = "insta_records.csv"
with open(filename, 'w', encoding='utf-8') as csvfile: 
    csvwriter = csv.writer(csvfile) 
    csvwriter.writerow(fields) 
    csvwriter.writerows(rows) 

屏幕上的结果

User1  😱 3w1 likeReply
User2  💖 3w1 likeReply
User3  Looking good! Collab, DM "bruteimpact.fashion 3wReply
User4  heyyy 3w5 likeReply

并在文件中

User,Text
User1, 😱 3w1 likeReply
User2, 💖 3w1 likeReply
User3," Looking good! Collab, DM ""bruteimpact.fashion 3wReply"
User4, heyyy 3w5 likeReply

要创建其他列,您必须首先编辑注释 - split()replace() 、 slice [start:end]等。

rows = []
for user, text in zip(comments[::2], comments[1::2]):
    parts = text.rsplit(' ', 2)#[:-1]
    parts.insert(0, user)
    print(parts)
    rows.append(parts)

屏幕上的结果

['User1', ' 😱', '3w1', 'likeReply']
['User2', ' 💖', '3w1', 'likeReply']
['User3', ' Looking good! Collab, DM', '"bruteimpact.fashion', '3wReply']
['User4', ' heyyy', '3w5', 'likeReply']

但是'3wReply'缺少空间,因此它没有正确拆分它,需要更多的工作才能正确拆分它。

顺便说一句:当你有3w5然后你可以split('w')得到['3', '5']但在 HTML 中可以是其他文本而不是w所以它需要更多的工作。 也许在BeautifulSoup使用更复杂的规则可以更好地拆分它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM