从导出按钮中提取CSV

时间:2017-01-05 19:49:04

标签: python beautifulsoup mechanize

我很抱歉因为无法明确地提供我正在处理的网址。我正试图从某个网站提取一些数据,但其组织得不够好。但是,它们确实有“导出到CSV文件”,该块的代码是......

<input type="submit" name="ctl00$ContentPlaceHolder1$ExportValueCSVButton" value="Export to Value CSV" id="ContentPlaceHolder1_ExportValueCSVButton" class="smallbutton">

在这种情况下,当没有特定的CSV网址时,最好的方法是抓取数据,我使用的是Mechanize和BS4。

3 个答案:

答案 0 :(得分:0)

如果您能够单击一个可以将数据作为csv下载的按钮,听起来您可能wget link该数据并将其保存在您的计算机上并在那里使用它。我不确定这是你在这里得到的,你可以提供更多细节吗?

答案 1 :(得分:0)

您应该尝试使用Selenium,Selenium是一套工具,可以跨多个平台自动化Web浏览器。它可以做很多事情,包括点击按钮。

答案 2 :(得分:0)

好吧,你需要一些起始URL来提供br.open()来开始这个过程。

看来你有一个aspnetForm类型控件,下面的代码可以作为一个起点,即使它不能正常工作(这是一个正在进行的工作...... :-)。 您需要通过浏览器开发工具的网络选项卡查看标题和参数,以查看它们。

 br.open("http://media.ethics.ga.gov/search/Lobbyist/Lobbyist_results.aspx?&Year=2016&LastName="+letter+"&FirstName=&City=&FilerID=")
soup = BS(br.response().read())

table = soup.find("table", { "id" : "ctl00_ContentPlaceHolder1_Results" })   # Need to add error check here...
if table is None:    # No lobbyist with last name starting with 'X' :-)
   continue
records = table.find_all('tr')        # List of all results for this letter

for form in br.forms():
    print "Form name:", form.name
    print form

for row in records: 
    rec_print = ""
    span = row.find_all('span', 'lblentry', 'value')
    for sname in span:
        if ',' in sname.get_text():    # They actually have a field named 'comma'!!
            continue
        rec_print = rec_print + sname.get_text() + ","   # Create comma-delimited output
    print(rec_print[:-1])    # Strip final comma

    lnk = row.find('a', 'lblentrylink')
    if lnk is None:   # For some reason, first record is blank. 
        continue
    print("Lnk: ", lnk)
    newlnk = lnk['id'] 
    print("NEWLNK: ", newlnk)
    newstr = lnk['href']
    newctl = newstr[+25:-5]  # Matching placeholder (strip javascript....)
    br.select_form('aspnetForm')  # Tried (nr=0) also...
    print("NEWCTL: ", newctl)
    br[__EVENTTARGET] = newctl
    response = br.submit(name=newlnk).read()