在csv fi中打印信息

2024-06-16 09:29:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个程序,从一个网站打印信息,但我想把这个信息在一个csv或excel文件。我就是这么做的:

import requests
from bs4 import BeautifulSoup
import re
import xlsxwriter


workbook  = xlsxwriter.Workbook('nossarede.xlsx')
worksheet = workbook.add_worksheet()

request = requests.get("http://www.drogariasnossarede.com.br/nossas-lojas")
soup = BeautifulSoup(request.content, 'html.parser')
data = soup.find_all("div", class_='item')

for container in data:
  Pharmacyname = container.find_all("h3")
  Pharmacyadd  = container.find_all("p")
  for pharmacy in Pharmacyname:
      print(pharmacy.text)
      for add in Pharmacyadd:
          print(add.text)
      print('')

直到这里是完美的,它打印完美的方式,我想要的。然后我尝试了这个:

    import csv
    with open('names.csv', 'wb') as ofile:
        writer = csv.writer(ofile)
        for container in data:
            Pharmacyname = container.find_all("h3")
            Pharmacyadd  = container.find_all("p")
            for pharmacy in Pharmacyname:
                for add in Pharmacyadd:
                    writer.writerow((pharmacy.text[0], add.text[1]))

但它不起作用。 它表明:

TypeError: a bytes-like object is required, not 'str'

我怎么做?? 谢谢!你知道吗


Tags: csvtextinimportaddfordatacontainer
2条回答

您正在用wb以字节模式打开文件。你知道吗

改变一下:

with open('names.csv', 'wb') as ofile:

为了

with open('names.csv', 'w') as ofile:

还有一件事。你的writerow错了。您只得到字符串的第一个字符。你知道吗

更改此项:

 writer.writerow((pharmacy.text[0], add.text[0]))

用于:

writer.writerow((pharmacy.text, add.text))

更改:

with open('names.csv', 'wb') as ofile:

即写入字节模式,以:

with open('names.csv', 'w') as ofile:

完整代码:

import requests
from bs4 import BeautifulSoup
import re
import xlsxwriter

request = requests.get("http://www.drogariasnossarede.com.br/nossas-lojas")
soup = BeautifulSoup(request.content, 'html.parser')
data = soup.find_all("div", class_='item')

import csv
with open('names.csv', 'w', newline='', encoding="utf-8") as ofile:
    writer = csv.writer(ofile)
    for container in data:
        Pharmacyname = container.find_all("h3")
        Pharmacyadd  = container.find_all("p")
        for pharmacy in Pharmacyname:
            for add in Pharmacyadd:
                writer.writerow((pharmacy.text, add.text))  

相关问题 更多 >