【问题标题】:saving the scraped data into a csv file将抓取的数据保存到 csv 文件中
【发布时间】:2017-05-01 06:17:18
【问题描述】:

我正在迭代一个过程,在该过程中,我将 Python 引导到一个网站,并指示 Python 在指定网站的 csv 文件中查找我的地址。我想告诉 Python 将网站中每个地址值的结果保存到 csv 文件中。

from selenium import webdriver
from bs4 import BeautifulSoup
import time
import csv


driver = webdriver.Chrome("C:\Python27\Scripts\chromedriver.exe")
chrome = driver.get('https://etrakit.friscotexas.gov/Search/permit.aspx')
with open('C:/Users/thefirstcolumnedited.csv','r') as f:
    addresses = f.readlines()

    for address in addresses:
        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)

    soup = BeautifulSoup(chrome, 'html.parser')

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

例如:

 6579 Mountain Sky Rd

上面的地址值从网站检索五行数据。如何告诉 Beautiful Soup 将结果保存在 csv 文件中的每个地址值?

【问题讨论】:

    标签: python python-2.7 csv web-scraping beautifulsoup


    【解决方案1】:

    这个想法是写入循环内的 CSV 文件(如果您想为所有输入地址生成单个 csv 文件,请使用 a“附加”模式)。至于提取结果,对于结果table 元素(带有id="ctl00_cplMain_rgSearchRslts_ctl00" 的元素),我将explicitly waittime.sleep() 不可靠并且通常比应有的速度慢),然后使用pandas.read_html() 阅读tabledataframe 中,然后我们可以方便地通过 .to_csv() 将其转储到 CSV 文件中:

    import pandas as pd
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.wait import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    # ...
    
    wait = WebDriverWait(driver, 10)
    
    for address in addresses:
        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()
    
        # wait for the results table
        table = wait.until(EC.visibility_of_element_located((By.ID, "ctl00_cplMain_rgSearchRslts_ctl00")))
    
        # make a dataframe and dump the results
        df = pd.read_html(table.get_attribute("outerHTML"))[0]
        with open('thematchingresults.csv', 'a') as f:
            df.to_csv(f)
    

    对于单个“6579 Mountain Sky Rd”地址,运行脚本后thematchingresults.csv的内容为:

    ,Permit Number,Address,Street Name,Applicant Name,Contractor Name,SITE_SUBDIVISION,RECORDID
    0,B13-2809,6579 MOUNTAIN SKY RD,MOUNTAIN SKY RD,SHADDOCK HOMES LTD,SHADDOCK HOMES LTD,PCR - SHERIDAN,MAC:1308050328358768
    1,B13-4096,6579 MOUNTAIN SKY RD,MOUNTAIN SKY RD,MIRAGE CUSTOM POOLS,MIRAGE CUSTOM POOLS,PCR - SHERIDAN,MAC:1312030307087756
    2,L14-1640,6579 MOUNTAIN SKY RD,MOUNTAIN SKY RD,TDS IRRIGATION,TDS IRRIGATION,SHERIDAN,ECON:140506012624706
    3,P14-0018,6579 MOUNTAIN SKY RD,MOUNTAIN SKY RD,MIRAGE CUSTOM POOLS,,SHERIDAN,LCR:1401130949212891
    4,ROW14-3205,6579 MOUNTAIN SKY RD,MOUNTAIN SKY RD,Housley Group,Housley Group,,TLW:1406190424422330
    

    希望这对您来说是一个好的起点。

    【讨论】:

      猜你喜欢
      • 2020-10-11
      • 2021-11-23
      • 1970-01-01
      • 2020-11-04
      • 2016-03-02
      • 1970-01-01
      • 2018-06-06
      • 1970-01-01
      • 2018-09-30
      相关资源
      最近更新 更多