python发布Web表单和内容检索

时间:2014-05-24 23:38:17

标签: python forms post

需要以迭代方式提交以下表单的表单字段,并检索一旦表单以结构化方式发布为管道提交文件后获得的所有良好信息数据:

http://cogcc.state.co.us/cogis/ProductionSearch.asp

  

显示生产数据:WELL(复选框)
  年份范围:2012年至2014年   县:选择所有
  限制记录:(想要所有记录)其他5000(上限)

剩余字段均为空白。

我正在使用python,我无法通过运行论坛中提供的一些早期类似的解决方案来达到预期的效果。

1 个答案:

答案 0 :(得分:0)

你欠我一杯啤酒! :)

/tmp ~ python test2.py 
/tmp ~ cat out.csv 
County,Sequence,Sidetrack,Year,Oil Production(barrels),Oil Sales(barrels),Gas Production(MCF),Gas Sales(MCF),Water Production(barrels),Location
001,05242,00,2014,116,66,,,"2,958",SWSE 22 2S 57W
001,05289,00,2014,268,152,,,"4,080",NWNE 22 2S 57W

运行pip install beautifulsoup4 requests,你很高兴:)将值maxrec设置为所需的条目数量。

import requests
from bs4 import BeautifulSoup
import csv
import sys

postdata = {
    'grouping_type': "wells",
    'FromYear': '2012',
    'ToYear': '2014',
    'maxrec': '5000'
}

r = requests.post('http://cogcc.state.co.us/cogis/ProductionSearch2.asp',
                  data=postdata, timeout=3600.0)

if r.status_code != 200:
    print("Got status code {}, cannot proceed".format(r.status_code))
    sys.exit(1)

soup = BeautifulSoup(r.text)
trlist = soup.findAll('table')[1].findAll("tr")
header = trlist[1]
data = trlist[2:]

with open('out.csv', 'wb') as csvfile:
    csvwriter = csv.writer(csvfile)
    csvwriter.writerow([row.get_text() for row in header.find_all("th")])

    for entry in data:
        csvwriter.writerow([' '.join(item.get_text().split())
                            for item in entry.findAll("td")])

好像你大约设置了maxrec > 5125,你会收到服务器错误:/

一切顺利!