【问题标题】:Read CSV file with BeautifulSoup使用 BeautifulSoup 读取 CSV 文件
【发布时间】:2023-03-04 01:38:01
【问题描述】:

在网站上抓取一些信息后,我必须将带有原始代码的文件保存为 html 格式,因为我没有找到find_all列表列表中的文本的解决方案。

现在我有了数据,但我无法获取文本,因为bs4 无法识别格式列表。 这是我的开放代码:

with open('/my_file.csv', 'r') as read_obj:
    csv_reader = reader(read_obj)
    list_of_rows = list(csv_reader)
    print(list_of_rows)

这是列表格式:

[['', '0', '1', '2', '3'], ['0','<span class="item">Red <small>col.</small></span>',
  '<span class="item">120 <small>cc.</small></span>',
  '<span class="item">Available <small>in four days</small></span>',
  '<span class="item"><small class="txt-highlight-red">15 min</small></span>'],
 ['1', '<span class="item">Blue <small>col.</small></span>',
  '<span class="item">200 <small>cc.</small></span>',
  '<span class="item">Available <small>in a week</small></span>',
  '<span class="item">04 mar <small></small></span>'],
 ['0', '<span class="item">Green <small>col.</small></span>',
  '<span class="item">Available <small>immediately</small></span>',
  '<span class="item"><small class="txt-highlight-red">2 hours</small></span>']]

有没有办法在 BeautifulSoup 中读取 csv 文件然后解析它?

任务的目的是只保留文本,删除'&lt;&gt;'(包括符号)之间的所有内容。

【问题讨论】:

  • 当您抓取数据并写入 CSV 文件时,只提取文本并放入 CSV,而不是所有 Html 标签。
  • :) 我知道,但我必须继续工作,直到您在我的上一个问题中给出解决方案并且时间线很重要。你知道有什么办法解决吗?
  • 您可以读取CSV,并拆分一串列表并获取您想要的数据。坚果这不是一个好方法。你的最后一个问题是什么?没有更多信息,没有人可以帮助您。
  • 在这个你给出了解决方案:link这就是我的意思

标签: list beautifulsoup scrape


【解决方案1】:

您可以创建一个函数来应用 beautifulsoup 对象并返回文本。如果没有要解析的标签/内容,它将保持原样。

另外,我宁愿只使用 pandas 来读取该 csv。

import pandas as pd
from bs4 import BeautifulSoup

df = pd.read_csv('/my_file.csv')

def foo_bar(x):
    try:
        return BeautifulSoup(x, 'lxml').text
    except:
        return x

print ('Parsing html in table...')
df = df.applymap(foo_bar)

输入示例:

df = pd.DataFrame([['0','<span class="item">Red <small>col.</small></span>',
  '<span class="item">120 <small>cc.</small></span>',
  '<span class="item">Available <small>in four days</small></span>',
  '<span class="item"><small class="txt-highlight-red">15 min</small></span>'],
 ['1', '<span class="item">Blue <small>col.</small></span>',
  '<span class="item">200 <small>cc.</small></span>',
  '<span class="item">Available <small>in a week</small></span>',
  '<span class="item">04 mar <small></small></span>'],
 ['0', '<span class="item">Green <small>col.</small></span>',
  '<span class="item">Available <small>immediately</small></span>',
  '<span class="item"><small class="txt-highlight-red">2 hours</small></span>']], columns = ['', '0', '1', '2', '3'])

原表:

print (df.to_string())
                                                      0                                                  1                                                  2                                                  3
0  0  <span class="item">Red <small>col.</small></span>   <span class="item">120 <small>cc.</small></span>  <span class="item">Available <small>in four da...  <span class="item"><small class="txt-highlight...
1  1  <span class="item">Blue <small>col.</small></s...   <span class="item">200 <small>cc.</small></span>  <span class="item">Available <small>in a week<...   <span class="item">04 mar <small></small></span>
2  0  <span class="item">Green <small>col.</small></...  <span class="item">Available <small>immediatel...  <span class="item"><small class="txt-highlight...                                               None

输出:

print (df.to_string())
               0                      1                       2        3
0  0    Red col.                120 cc.  Available in four days   15 min
1  1   Blue col.                200 cc.     Available in a week  04 mar 
2  0  Green col.  Available immediately                 2 hours     None

【讨论】:

    猜你喜欢
    • 2021-10-02
    • 2018-05-24
    • 2015-06-12
    • 1970-01-01
    • 2011-10-28
    • 2014-12-15
    • 2011-08-12
    • 1970-01-01
    相关资源
    最近更新 更多