有没有办法为.writerow选择列?

时间:2019-03-23 19:35:20

标签: python csv beautifulsoup

我想抓取一个站点并将数据保存在可以在Excel中打开的 csv 文件中。我设法检索了信息,但是将其传输到 csv 文档时遇到了麻烦。当我打开文档时,标题在那里并且在不同的列中,但是实际的内容在相同的地方,首先是 name ,然后是 price

我尝试将file.writerow([Name, Price])放在代码的末尾,但是,可能是因为我对{em> name 使用了span.find,所以只显示了姓氏值。我认为file.writerow必须处于循环状态才能工作,但是我无法将数据移到另一列。

代码如下:

import requests
from bs4 import BeautifulSoup
import csv

file = csv.writer(open('GPU.csv', 'w'))
file.writerow(['Name','Price'])

url = 'link'

page = requests.get(url)

soup = BeautifulSoup(page.text,'html.parser')

for span in soup.findAll('span', attrs={'class':'details'}):
    name = span.find('a').string
    file.writerow([name])

for span in soup.findAll('span', attrs={'class':'price'}):
    price = span.findAll(text=True)
    file.writerow([price])

如果file.writerow我无能为力,则可能是循环问题。我没有编码经验,不胜感激。

1 个答案:

答案 0 :(得分:0)

csv模块始终仅顺序写入。但是,您可以将nameprices向上收集到单独的列表中,然后使用zip()函数成对地遍历它们,如下所示:

import requests
from bs4 import BeautifulSoup
import csv

url = "link"

page = requests.get(url)

soup = BeautifulSoup(page.text, "html.parser")

names = []
prices = []

for span in soup.findAll("span", attrs={"class": "details"}):
    names.append(span.find("a").string)

for span in soup.findAll("span", attrs={"class": "price"}):
    prices.append(span.findAll(text=True))

file = csv.writer(open("GPU.csv", "w"))
file.writerow(["Name", "Price"])

for name, price in zip(names, prices):
    file.writerow([name, price])