从导出按钮中提取 CSV
Extracting CSV from Export Button
对于无法具体说明我正在处理的 url,我深表歉意。我正在尝试从某个站点提取一些数据,但它的组织不够好。然而,他们确实有一个 "Export To CSV file" 并且该块的代码是 ...
<input type="submit" name="ctl00$ContentPlaceHolder1$ExportValueCSVButton" value="Export to Value CSV" id="ContentPlaceHolder1_ExportValueCSVButton" class="smallbutton">
在这种情况下,当 CSV 没有特定 url 时,抓取数据的最佳方法是什么,我使用的是 Mechanize 和 BS4。
如果您能够单击可以将数据下载为 csv 格式的按钮,听起来您可以 wget link
该数据并将其保存在您的计算机上并在那里使用它。不过,我不确定这是否是您在这里得到的,您可以提供更多详细信息吗?
您应该试试 Selenium,Selenium 是一套工具,可以跨多个平台自动化 Web 浏览器。它可以做很多事情,包括点击按钮。
嗯,你需要一些开始 URL 来喂养 br.open() 甚至开始这个过程。
看起来你有一个 aspnetForm 类型的控件,下面的代码可以作为一个起点,即使它不起作用 as-is(它正在进行中...: -).
您需要通过浏览器开发工具的网络选项卡查看 headers 和参数才能看到它们。
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()
对于无法具体说明我正在处理的 url,我深表歉意。我正在尝试从某个站点提取一些数据,但它的组织不够好。然而,他们确实有一个 "Export To CSV file" 并且该块的代码是 ...
<input type="submit" name="ctl00$ContentPlaceHolder1$ExportValueCSVButton" value="Export to Value CSV" id="ContentPlaceHolder1_ExportValueCSVButton" class="smallbutton">
在这种情况下,当 CSV 没有特定 url 时,抓取数据的最佳方法是什么,我使用的是 Mechanize 和 BS4。
如果您能够单击可以将数据下载为 csv 格式的按钮,听起来您可以 wget link
该数据并将其保存在您的计算机上并在那里使用它。不过,我不确定这是否是您在这里得到的,您可以提供更多详细信息吗?
您应该试试 Selenium,Selenium 是一套工具,可以跨多个平台自动化 Web 浏览器。它可以做很多事情,包括点击按钮。
嗯,你需要一些开始 URL 来喂养 br.open() 甚至开始这个过程。
看起来你有一个 aspnetForm 类型的控件,下面的代码可以作为一个起点,即使它不起作用 as-is(它正在进行中...: -). 您需要通过浏览器开发工具的网络选项卡查看 headers 和参数才能看到它们。
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()