2016-12-14 306 views
0

我一直在摸索我的頭如何解決這個地雷的困境一段時間了。我在我的csv文件中有一個Address列,其中包含地址列表。我希望能夠直接使用Python在csv文件中搜索下面指定的網站和個人地址值,並將結果保存到新的csv文件中。搜索網站地址值

import csv 
import requests 

with open('C:/Users/thefirstcolumn.csv') as csvfile: 
    reader = csv.DictReader(csvfile) 
    for row in reader: 
     print(row['Address']) 

website = requests.get('https://etrakit.friscotexas.gov/Search/permit.aspx') 

writer = csv.writer(open('thematchingresults.csv', 'w')) 

print website.content 

例如:

我有在CSV文件中的地址值:

6525 Mountain Sky Rd 

返回三行數據時,我手工粘貼在搜索框中輸入地址。如何告訴Python搜索網站上csv文件中的每個地址,並將每個地址的結果保存在新的csv文件中。我怎樣才能完成這個山區任務?

+0

你不能做什麼? –

+0

我需要關於如何指導Python逐一搜索每個地址列值的幫助。我怎樣才能做到這一點? –

回答

3

請求模塊從網站下載靜態HTML頁面。使用JavaScript

您需要使用Selenium與網站

交互。例如

from selenium import webdriver 
from bs4 import BeautifulSoup 
import time 
driver = webdriver.Firefox() 
driver.get('https://etrakit.friscotexas.gov/Search/permit.aspx') 
#read in addresses 
with open('file.csv','r') as f: 
    adresses = f.readlines() 

# use css selectors to locate search field 
for address in adresses: 
    driver.find_element_by_css_selector('#cplMain_txtSearchString').clear()  
    driver.find_element_by_css_selector('#cplMain_txtSearchString').send_keys(address) 
    driver.find_element_by_css_selector('#cplMain_btnSearch').click() 
    time.sleep(5) 
    # JS injected HTML 
    soup = BeautifulSoup(driver.page_source) 
    # extract relavant info from the soup 
    # and save to your new csv here 
+0

謝謝Tobey,我試過Selenium,但從我的理解中,Selenium只打開一個瀏覽器並將其自動化。我不認爲它實際上可以在搜索框中逐一搜索每個地址列值。 –

+0

我將擴展我的答案來解釋 – Tobey

+0

感謝Tobey,這個腳本確實做了一份工作,但它並沒有保存csv文件中地址的結果。那該如何實施? –

2

您需要爲您做的CSV文件中有每個值POST要求你不能互動。例如,要在https://etrakit.friscotexas.gov/Search/permit.aspx上搜索「6525 Mountain Sky Rd」,您可以查看開發者控制檯,查看它提供的POST參數。例如:

enter image description here

您可以使用類似requests並通過標頭值和形式的數據,或者你可以使用類似casperselenium效仿瀏覽器。

+0

硒在這裏可以生存嗎?我過去曾經使用它,根據我的理解,簡而言之,它可以自動進行網頁抓取過程。 –

+0

@PLearner另一個答案給出了一個很好的解釋。讓我知道如果這不能解決您的問題。 – David542

+0

該腳本完成了一項工作,但它不保存csv文件中地址的結果。那該如何實施? –