PYTHON-BEAUTIFULSOUP如何将空TD(表数据)刮取为空值而不是跳过它

Code_Journey_4_Fun

我想将网页抓取到4列csv文件中,并且某些表数据不包含任何数据,并且我想将其写为空单元格值,而不是使用跳过.text我还试图用.string ,但它给我TypeError: can only concatenate str (not "NoneType") to str我也想设定一个动态的发现得到,如果<td><a href>则追加<a>如果标签数据没有,追加是什么<td>,但写出来为空(或文本“无”)值,如果<td>有没有数据。您可以在下面看到HTML示例。

from urllib.request import urlopen as uReq
from bs4 import BeautifulSoup as soup

my_url = 'https://www.example.com'

# opening up connection, grabbing the page
uClient = uReq(my_url)

page_soup = soup(uClient.read(), "lxml")
uClient.close()

# containers = page_soup.find("table", {"class": "typetable"}).find_all("tr",{"class":"typetable"})
# container = containers[0]

containers = page_soup.find_all("tr", {"class": "typetable"})

# print(containers.td)

tds = []

out_filename = "output.csv"

headers = "Parameter,Type_Value,Cardinality,Description \n"

f = open(out_filename, "w")
f.write(headers)

parameter = []
type_value = []
cardinality = []
description = []

for container in containers:

    parameter = container.findAll('td')[0].text
 
    type_value = container.find_all('td')[1].text

    cardinality = container.find_all('td')[2].text

    description = container.find_all('td')[3].text


    print("parameter: " + parameter + "\n")
    print("type_value: " + type_value + "\n")
    print("cardinality: " + cardinality + "\n")
    print("description: " + description + "\n")

    #f.write(parameter + ', ' + type_value + ', ' + cardinality + ', "' + description + ' "\n')
    f.write(f'{parameter},{str(type_value)},{cardinality},"{description}"\n')

f.close()

这是一个示例html:

<tr class="typetable">
  <td>Data 1&nbsp;</td>
  <td>Data 2&nbsp;</td>
  <td>&nbsp;</td>
  <td>Data 4&nbsp;</td>
</tr>
<tr class="typetable">
  <td>Data 10&nbsp;</td>
  <td>
     <a href="#2ndPage">2ndPage</a>"&nbsp;"
  </td>
  <td>Data 3&nbsp;</td>
  <td>&nbsp;</td>
</tr>

我希望输出显示

Parameter,Type_Value,Cardinality,Description
Data 1,Data 2,,"Data 4"
Data 1,2ndPage,Data 3,

我已经在stackoverflow上测试和查找示例了几个星期了:(,请帮助。在此先感谢!

安德烈·凯斯利(Andrej Kesely)

您可以使用此脚本从表中提取数据:

import csv
from bs4 import BeautifulSoup


txt = '''<tr class="typetable">
  <td>Data 1&nbsp;</td>
  <td>Data 2&nbsp;</td>
  <td>&nbsp;</td>
  <td>Data 4&nbsp;</td>
</tr>
<tr class="typetable">
  <td>Data 10&nbsp;</td>
  <td>
     <a href="#2ndPage">2ndPage</a>"&nbsp;"
  </td>
  <td>Data 3&nbsp;</td>
  <td>&nbsp;</td>
</tr>'''

soup = BeautifulSoup(txt, 'html.parser')

all_data = []
for row in soup.select('tr.typetable'):
    tds = [td.a.get_text(strip=True) if td.a else td.get_text(strip=True) for td in row.select('td')]
    all_data.append(tds)


with open('data.csv', 'w', newline='') as csvfile:
    writer = csv.writer(csvfile, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL)
    writer.writerow(['Parameter','Type_Value','Cardinality','Description'])
    for row in all_data:
        writer.writerow(row)

写道data.csv

Parameter,Type_Value,Cardinality,Description
Data 1,Data 2,,Data 4
Data 10,2ndPage,Data 3,

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

当python 3中的一列(td)为空时如何跳过HTML表行(tr)

Python:输出为空而不是正确的值

如何将多个具有空值的连续列插入python数据框

跳过python中的空值

MySQL表为空,即使它已通过Python填充

如何使用python在表中插入一行值(不是空值?

Selenium Python如何验证html表不包含任何数据,该表为空

Python Pandas:两种方式为空值表

Python:如果存在空值,如何将Pyspark列转换为日期类型

表未正确刮取Python BeautifulSoup

如何使用BeautifulSoup跳过空的<td>?

Python:如何将元组添加到空列表?

如何将空参数传递给python函数?

如何将Python的“无”类型转换为“空”类型

使用 Python 3/Django,如何将 MySql 表数据导出为 YAML 文件?

空数组而不是 Python 中的抓取数据

如何将子集数据帧附加到for循环python中的另一个空数据帧

Python Pandas:如何将“数据框列”值设置为X轴标签

如何将python数据帧中前几行的值转置为新列

Python最小值为空

Zapier 发送 Python JSON 字典并跳过空值

如何将这些文本解析为Python表?

Python-如何使用“ requests&BeautifulSoup”抓取Tr / Td表数据

Python Beautifulsoup 表 td 元素

如何将元组值存储为python变量

无法使用python Beautifulsoup获取表<td>文本值

Python数据框获取空值计数

Python-Beautifulsoup-仅将最终刮取链接中的数据输出到文本文件

如何将数据表述为表格-Python