python, mechanize - 使用mechanize打开文本文件
我正在学习mechanize。现在我想打开一个文本文件,页面上有一个链接,显示的是
文本 (.prn)。我遇到的一个问题是,这个页面上只有一个表单,而文件不在这个表单里。另一个问题是,这个页面上有几个文本文件,但它们的名字都是一样的——文本 (.prn)。所以我想我需要找到第一个文件并打开它。让我想要打开的文本文件有个特别的名字,叫做
我正在访问的网页是:http://www.treasurydirect.gov/govt/reports/pd/mspd/2013/2013_feb.htm
这是我想在mechanize中打开的文本文件所在的html部分:
</div>
<!-- END LOCALNAV -->
<!-- BEGIN CONTENT -->
<div id="content">
<h1>February 2013</h1>
<!-- InstanceBeginEditable name="content" -->
<ul>
<li>Summary
<ul>
<li><a href="/govt/reports/pd/mspd/2013/opds022013.pdf">Adobe Acrobat (.pdf)</a></li>
<li><a href="/govt/reports/pd/mspd/2013/opds022013.prn">Text (.prn)</a></li>
</ul>
</li>
<li>STRIPS
<ul>
<li><a href="/govt/reports/pd/mspd/2013/opdr022013.pdf">Adobe Acrobat (.pdf)</a></li>
<li><a href="/govt/reports/pd/mspd/2013/opdr022013.xls">Excel 5.0/95 (.xls )</a></li>
<li><a href="/govt/reports/pd/mspd/2013/opdr022013.prn">Text (.prn)</a></li>
</ul>
</li>
<li>Entire MSPD
<ul>
<li><a href="/govt/reports/pd/mspd/2013/opdx022013.xls">Excel File for Primary Dealers</a></li>
<li><a href="/govt/reports/pd/mspd/2013/opdm022013.pdf">Adobe Acrobat (.pdf)</a></li>
<li><a href="/govt/reports/pd/mspd/2013/opdm022013.xls">Excel 5.0/95 (.xls)</a></li>
<li><a href="/govt/reports/pd/mspd/2013/opdm022013.prn">Text (.prn)</a></li>
</ul>
</li>
</ul>
<p>Note: To read or print a PDF document, you need the Adobe Acrobat Reader (v5.0 or higher) software installed on your computer. You can download the Adobe Acrobat Reader from the <a href="/exit.htm?http://get.adobe.com/reader/">Adobe website</a>.</p>
<p>Note: If you need <a href="/helpdownload.htm">help downloading...</a></p>
<!-- InstanceEndEditable --> </div>
<!-- END CONTENT -->
<!-- BEGIN SUBLOCALNAV -->
<div id="right">
这是我到目前为止的代码,从文本文件所在的页面之前开始:
br = mechanize.Browser()
br.set_handle_equiv(False)
br.open(site)
print 'br.title',br.title()
allforms = list(br.forms())
br.form = allforms[0]
br.follow_link(text_regex="February", nr=0)
#br.click_link(text='February', nr=0) # this works to
#next page
print br.title()
allforms = list(br.forms())
print allforms
br.form = allforms[0]
getstuff=br.click_link(text="Text (.prn)", nr=0) # this works to
csvData=getstuff.readlines() # this is where is get error
这是我的错误追踪信息:
Traceback (most recent call last):
File "treasury2.py", line 56, in <module>
csvData=getstuff.readlines()
File "C:\Python27\lib\site-packages\mechanize\_urllib2_fork.py", line 173, in __getattr__
raise AttributeError, attr
AttributeError: readlines
我正在使用mechanize、BeautifulSoup、urllib、urllib2和python27。
请给我一些帮助,或者告诉我你认为我应该使用什么。
1 个回答
1
在你执行完 getstuff=br.click_link(text="Text (.prn)", nr=0)
之后,不要用 csvData=getstuff.readlines(),而是应该调用:
br.open(getstuff)
csvData = br.response().read()
如果你还需要对之前的页面(也就是 2013_feb.htm)做些什么,可以调用:
br.back()
这样可以让 br
回到和 br.open
执行之前一样的状态。