初めてスクレイピング コードを実行したときに生成した既存の csv に、ウェブページからスクレイピングしたデータを更新したいと考えています。すでにスクレイピングされた行の下に新しいデータを追加したい。
以下は、データをスクレイピングして csv を書き込むために使用しているコードです。
import csv
import urllib2
import sys
import time
from bs4 import BeautifulSoup
from itertools import islice
page = urllib2.urlopen('http://shop.ee.co.uk/mobile-phones/pay-monthly/').read()
soup = BeautifulSoup(page)
soup.prettify()
with open('EE_AppendTesting.csv', 'a') as csvfile:
spamwriter = csv.writer(csvfile, delimiter=',')
#spamwriter.writerow(["Date","Month","Day of Week","Device Name","Price","Plan Monthly Price"])
items = soup.findAll('h2', {"class":"heading2 no-margin-top"})
prices = soup.findAll('span', {"class": "price"})
monthly = soup.findAll('div',{"class":"mrc-holder"})
for item, price, monthly1 in zip(items, prices, monthly):
textcontent = u' '.join(islice(monthly1.stripped_strings, 2, 3, 1))
if textcontent:
spamwriter.writerow([time.strftime("%Y-%m-%d"),time.strftime("%B"),time.strftime("%A") ,unicode(item.string).encode('utf8').strip(),unicode(price.string).encode('utf8').replace('£','£').strip(),unicode(textcontent).encode('utf8').replace('£','£').strip()])
現在、コードを実行するたびに、各データ エントリの間に新しいデータが追加され、空の行が追加されます。以下は、追加された csv のサンプルです。
26-12-2012 December Wednesday Nokia Lumia 920 White £ 19.99 £46.00
26-12-2012 December Wednesday iPhone 5 64GB Black £ 139.99 £56.00
26-12-2012 December Wednesday Nokia Lumia 820 FREE £36.00
26-12-2012 December Wednesday iPhone 5 16GB White £ 19.99 £56.00