2016-10-25 13 views
0

私はこのウェブスクレイピングプログラムを書く上で、いくつかの簡単な助けをしたいと思います。これまでのところ、正しくスクラップしていますが、CSVファイルに書き込むのに問題があります。ウェブスクレイピング時にcsvに新しい列を書き込む方法は?

私は、各レビューから二つのことをこするよ:レビュースコアと私は2番目の列に最初の列にレビュースコア、と書かれたレビューを書きたいのですが書かれたレビュー

を。しかし、writerowはそれを行ごとにしか行いません。

ありがとうございました!あなたの最初のアプローチは、個別の行としての各項目を取り、次々に書き込む

writer.writerow([review_text, review2_text]) 

::)

import os, requests, csv 
from bs4 import BeautifulSoup 

# Get URL of the page 
URL = ('https://www.tripadvisor.com/Attraction_Review-g294265-d2149128-Reviews-Gardens_by_the_Bay-Singapore.html') 

with open('GardensbytheBay.csv', 'w', newline='') as csvfile: 
    writer = csv.writer(csvfile) 

    # Looping until the 5th page of reviews 
    for pagecounter in range(3): 

     # Request get the first page 
     res = requests.get(URL) 
     res.raise_for_status 

     # Download the html of the first page 
     soup = BeautifulSoup(res.text, "html.parser") 
     # Match it to the specific tag for all 5 ratings 
     reviewElems = soup.findAll('img', {'class': ['sprite-rating_s_fill rating_s_fill s50', 'sprite-rating_s_fill rating_s_fill s40', 'sprite-rating_s_fill rating_s_fill s30', 'sprite-rating_s_fill rating_s_fill s20', 'sprite-rating_s_fill rating_s_fill s10']}) 
     reviewWritten = soup.findAll('p', {'class':'partial_entry'}) 

     if reviewElems: 
      for row, rows in zip(reviewElems, reviewWritten): 
       review_text = row.attrs['alt'][0] 
       review2_text = rows.get_text(strip=True).encode('utf8', 'ignore').decode('latin-1') 
       writer.writerow([review_text]) 
       writer.writerow([review2_text]) 

      print('Writing page', pagecounter + 1) 
     else: 
      print('Could not find clue.') 

     # Find URL of next page and update URL 
     if pagecounter == 0: 
      nextLink = soup.select('a[data-offset]')[0] 
     elif pagecounter != 0: 
      nextLink = soup.select('a[data-offset]')[1] 

     URL = 'http://www.tripadvisor.com' + nextLink.get('href') 

print('Download complete') 
+0

'のwriterow([REVIEW_TEXT、review2_text])' – furas

答えて

2

あなたはとレビュースコアとテキスト同じ行のが、別の列を置くことができますそれはあなたが望むものではありません。

+0

アメージング!ありがとうございました :) – Domoman

0

あなたはパンダのデータフレームを使用することができます。

import pandas as pd 
import numpy as np 
csv_file = pd.read_csv('GardensbytheBay.csv') 
csv_file.insert(idx, cloname, value) 
csv_input.to_csv('output.csv', index=False) 
関連する問題