无法处理csv文件中的标头

时间:2017-10-26 07:34:20

标签: python python-3.x csv web-scraping

我已经使用python编写了一些代码来从网页中抓取一些标题和价格,并将结果写入csv文件。该脚本运行得很棒。当我将数据附加到csv文件时,脚本正在以这样的方式编写标题:如果它运行4个循环,则标题将被写入4次。如何修复它以便标题将被写入一次。感谢。

这是剧本:

~/quickstart.py
Traceback (most recent call last):
  File "~/quickstart.py", line 77, in <module>
    main()
  File "~/quickstart.py", line 66, in main
    contact2()
TypeError: 'dict' object is not callable

Process finished with exit code 1

2 个答案:

答案 0 :(得分:1)

不要在for循环中写入标题:

import csv
import requests
from bs4 import BeautifulSoup

diction_page = ['http://www.bloomberg.com/quote/SPX:IND','http://www.bloomberg.com/quote/CCMP:IND']

outfile = open('item.csv','w',newline='')
writer = csv.writer(outfile)
writer.writerow(["Title","Price"])

for link in diction_page:
    res = requests.get(link).text
    soup = BeautifulSoup(res,'lxml')
    title = soup.select_one('.name').text.strip()
    price = soup.select_one('.price').text
    print(title,price)
    writer.writerow([title, price])
outfile.close()

答案 1 :(得分:1)

作为一种选择,你可以试试这个:

import csv
import requests
from bs4 import BeautifulSoup

diction_page = ['http://www.bloomberg.com/quote/SPX:IND','http://www.bloomberg.com/quote/CCMP:IND']

for i,link in enumerate(diction_page):
    res = requests.get(link).text
    soup = BeautifulSoup(res,'lxml')
    title = soup.select_one('.name').text.strip()
    price = soup.select_one('.price').text
    print(title,price)
    with open('item.csv','a',newline='') as outfile:
        writer = csv.writer(outfile)
        if (i == 0):
            writer.writerow(["Title","Price"])
        writer.writerow([title, price])