2017-04-24 8 views
1

テーブルを印刷することはできますが、同じデータを.csvファイルに取り出すことはできません。私は毎日掻きと学習に新しいです。スクラップテーブルのデータを.csvに

どのようにしてこのデータをCSVファイルにスクレイプできますか?

標準ライブラリモジュール 輸入OS 輸入SYS

答えて

1

# The wget module 
import wget 

# The BeautifulSoup module 
from bs4 import BeautifulSoup 

# The selenium module 
from selenium import webdriver 
from selenium.webdriver.common.keys import Keys 
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC 
from selenium.webdriver.common.by import By 

driver = webdriver.Chrome() # if you want to use chrome, replace Firefox() with Chrome() 
driver.get("https://www.arcountydata.com/county.asp?county=Benton") # load the web page 
search_begin = driver.find_element_by_xpath("//*[@id='Assessor']/div/div[2]/a/i").click() 
# for websites that need you to login to access the information 
elem = driver.find_element_by_id("OwnerName") # Find the email input field of the login form 
elem.send_keys("Roth Family Inc") # Send the users email 

search_exeute = driver.find_element_by_xpath("//*[@id='Search']").click() 


src = driver.page_source # gets the html source of the page 

parser = BeautifulSoup(src,"lxml") # initialize the parser and parse the source "src" 


table = parser.find("table", attrs={"class" : "table table-striped-yellow  table-hover table-bordered table-condensed table-responsive"}) # A list of attributes that you want to check in a tag) 

f = open('/output.csv', 'w') 

parcel="" 
owner="" 
ptype="" 
site_address="" 
location="" 
acres="" 

summons =[] 
#print table 

list_of_rows = [] 
for row in table.findAll('tr')[1:]: 
    list_of_cells = [] 
    for cell in row.findAll('td'): 
     text = cell.text.replace(" ", "") 
     list_of_cells.append(text) 
    list_of_rows.append(list_of_cells) 
print list_of_rows 

driver.close() # closes the driver ?> 
あなた罰金卿に新しいメンバー、幸運を見て非常に素晴らしいです! あなたはすばらしい仕事をしています。あなたはコードを非常に上手くコメントしました。それはあなたがそれを理解して、偉大な仕事をしていることを意味します!

import csv 

これは、CSVファイルの読み込み/書き込みが容易なPythonモジュールです。最初にインポートしてみましょう。

with open(name_csv+'.csv', 'w+') as csvfile: 
     spamwriter = csv.writer(csvfile, delimiter=',') 
     spamwriter.writerow(list_of_rows) 
#Used to write 1 row, each element in the array will be seperated by a comma 

EDIT:

with open('somecsv.csv','w+') as csvfile: 
    spamwriter = csv.writer(csvfile, delimiter='|') # Changed the delimiter (Way of separating) 
    # This opens the CSV file and we set some additional parameters 
    for row in table.findAll('tr')[::2]: 
     list_of_cell = [] 
     for cell in row.findAll('td')[:5]: 
      text = cell.text.replace(" ", "").strip() 
      text = text.replace('''...\n\n\n'''," |") #This one is added so it replaces string before Lot with comma 
      text = text.replace(''':\n''',':') #This one is added so it doesn't interfere 
      text = text.replace('''\n''','|') #Adds a comma before block 
      list_of_cell.append(text) 
     print(list_of_cell) 
     spamwriter.writerow(list_of_cell) 
+0

おかげ不良..私は今、CSVファイルにデータを解析することが可能だとして、それが役立ちます。しかし、データ全体が1行に解析されます。htmlテーブルで明らかなように、行ごとに解析するようにすればいいですか... – user3691781

+0

これはうまくいくはずですが、csvをインポートすることを忘れないでください。 selenctionセレンも追加する予定です。 –

+0

ありがとうございました。私は今日何か新しいことを学ぶのに役立ちます。コードをさらにスクラブしようとします...いくつかのデータは複数の行で解析される列です。 – user3691781

関連する問題