我想抓取一个站点并将数据保存在可以在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
我无能为力,则可能是循环问题。我没有编码经验,不胜感激。
答案 0 :(得分:0)
csv
模块始终仅顺序写入。但是,您可以将name
和prices
向上收集到单独的列表中,然后使用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])