请帮帮我,, 我想在“td”、“Barcode”和“nama produk”中获取 2 个数据,但我得到的数据非常糟糕。我应该修复什么?
import csv
import requests
from bs4 import BeautifulSoup
outfile = open("dataaa.csv","w",newline='')
writer = csv.writer(outfile)
page = 0
while page < 3 :
url = "http://ciumi.com/cspos/barcode-ritel.php?page={:d}".format(page)
response = requests.get(url)
tree = BeautifulSoup(response.text, 'html.parser')
page += 1
table_tag = tree.select("table")[0]
tab_data = [[item.text for item in row_data.select("tr")]
for row_data in table_tag.select("td")]
for data in tab_data:
writer.writerow(data)
print(table_tag)
print(response, url, ' '.join(data))
import fileinput
seen = set()
for line in fileinput.FileInput('dataaa.csv', inplace=1):
if line in seen: continue
seen.add(line)
print (line)
我需要改进什么才能获得漂亮的结果?
的代码存在一些问题,导致从网站中提取的数据不正确。以下是更正后的代码,以及对所做的更改的解释:
import csv
import requests
from bs4 import BeautifulSoup
outfile = open("dataaa.csv", "w", newline="")
writer = csv.writer(outfile)
# 写入 CSV 文件的标题行
writer.writerow(["Barcode", "Nama Produk"])
page = 0
while page < 3:
url = "http://ciumi.com/cspos/barcode-ritel.php?page={:d}".format(page)
response = requests.get(url)
tree = BeautifulSoup(response.text, 'html.parser')
page += 1
table_tag = tree.find("table") # 使用 find() 查找第一个表格
rows = table_tag.find_all("tr")[1:] # 跳过标题行
for row in rows:
cols = row.find_all("td")
barcode = cols[1].text.strip() # 获取第二个单元格(Barcode)
nama_produk = cols[2].text.strip() # 获取第三个单元格(Nama Produk)
writer.writerow([barcode, nama_produk])
print(f"Barcode: {barcode}, Nama Produk: {nama_produk}")
outfile.close()
代码解释:
- 添加标题行: 代码的第一部分添加了一行代码,将 "Barcode" 和 "Nama Produk" 作为标题写入 CSV 文件。
-
查找表格和行:
使用
table_tag.find_all("tr")
获取表格中的所有行。然后使用[1:]
切片列表以跳过标题行。 -
提取数据:
循环遍历每一行,使用
row.find_all("td")
获取所有单元格。然后,使用索引[1]
和[2]
提取 "Barcode" 和 "Nama Produk" 的值。 - 写入 CSV 文件: 将提取的数据写入 CSV 文件。
- 打印输出: 将提取的数据打印到控制台,方便查看。
-
关闭文件:
使用
outfile.close()
关闭 CSV 文件,确保所有数据都被写入。
改进之处:
- 代码结构更清晰: 每个步骤都有清晰的注释,便于理解代码的功能。
- 数据提取更准确: 使用正确的索引提取 "Barcode" 和 "Nama Produk" 的值。
- 添加了标题行: 使 CSV 文件更易读。
- 关闭文件: 确保所有数据都被写入 CSV 文件。
这段代码将为提供一个名为 "dataaa.csv" 的文件,其中包含从网站上抓取的 "Barcode" 和 "Nama Produk" 数据。
标签:python,csv,web-scraping,beautifulsoup From: 57802703