显然,完全是菜鸟。 为了开放记录/政府透明度/报告/等,自学 Python 进行网络抓取。
我想抓取一个 .aspx 页面,这是 2012 年 1 月至 3 月的每周日历
但它没有形式...
也许你们这些好人可以在我花几天时间与它斗争之前告诉我是否有可能找到解决方案。
http://webmail.legis.ga.gov/Calendar/default.aspx?chamber=house
查看日历上约会的唯一方法是在日历图片上选择一天。 但是,至少,如果您单击星期一,它会显示本周的所有约会。 (我想收集所有这些任命,以便计算每个委员会开会的频率,作为计算哪种立法受到关注以及哪种立法被忽略的一个代理。)
那么,该使用什么策略呢?看来每个月至少在其内部都被分配了一个前面带有“V”的连续四位数字,例如 V4414,以及带有非前缀数字的日期。
我只在 2012 年 1 月至 3 月狩猎;其他月份没有任何关系,而且大部分都是空的。
有线索吗?
...<a href="javascript:__doPostBack('calMain','V4414')" style="color:#333333" title="Go to the previous month">February</a></td><td align="center" style="width:70%;">March 2012</td><td align="right" valign="bottom" style="color:#333333;font-size:8pt;font-weight:bold;width:15%;"><a href="javascript:__doPostBack('calMain','V4474')" style="color:#333333" title="Go to the next month">April</a></td></tr>
一个图案?
...<td align="center" style="color:#999999;width:14%;"><a href="javascript:__doPostBack('calMain','4439')" style="color:#999999" title="February 26">26</a></td><td align="center" style="color:#999999;width:14%;"><a href="javascript:__doPostBack('calMain','4440')" style="color:#999999" title="February 27">27</a></td><td align="center" style="color:#999999;width:14%;"><a href="javascript:__doPostBack('calMain','4441')" style="color:#999999" title="February 28">28</a></td>...
干杯并感谢!!
该表格包含四个
input
,其中 name
为:
__EVENTTARGET
__EVENTARGUMENT
__VIEWSTATE
__EVENTVALIDATION
后两者有初始值。你需要刮掉那些。前两者是由这些链接设置的。例如,您有一个链接:
<a href="javascript:__doPostBack('calMain','4504')" style="color:Black" title="May 01">1</a>
看
href
:
javascript:__doPostBack('calMain','4504')
以某种方式从中解析出这两个字符串。前者是
__EVENTTARGET
。后者是__EVENTARGUMENT
。
一旦您拥有了所有四项数据,您就可以发出
POST
请求来获取下一页。
您可以使用类似
urllib.parse.urlencode
的东西在Python中复制POST请求来构建查询字符串。
为此,显然您必须找出查询字符串是什么样的。或者,您可以使用其他工具,例如 Selenium RC。