我需要从.aspx网页中抓取查询结果。
http://legistar.council.nyc.gov/Legislation.aspx
该网址是静态的,那么如何向该页面提交查询并获得结果?假设我们需要从相应的下拉菜单中选择“所有年份”和“所有类型”。
那里的人必须知道该怎么做。
作为概述,您将需要执行四个主要任务:
http请求和响应处理是通过Python标准库的urllib和urllib2中的方法和类完成的。可以使用Python的标准库的HTMLParser
或其他模块(例如Beautiful
Soup)
来完成html页面的解析。
以下代码段演示了在问题指示的站点上请求和接收搜索的过程。该站点是ASP驱动的,因此,我们需要确保发送多个表单字段,其中一些表单字段具有“可怕”的值,因为ASP逻辑使用这些字段来维护状态并在某种程度上对请求进行身份验证。确实是提交。必须使用
http POST方法
发送请求,因为这是该ASP应用程序所期望的。主要困难在于确定ASP期望的表单字段和关联值(使用Python获取页面是最容易的部分)。
直到我删除了大部分的VSTATE值,并可能通过添加注释引入了一两个拼写错误,这段代码才起作用,或者更确切地说, 是 起作用的。
import urllib
import urllib2
uri = 'http://legistar.council.nyc.gov/Legislation.aspx'
#the http headers are useful to simulate a particular browser (some sites deny
#access to non-browsers (bots, etc.)
#also needed to pass the content type.
headers = {
'HTTP_USER_AGENT': 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.13) Gecko/2009073022 Firefox/3.0.13',
'HTTP_ACCEPT': 'text/html,application/xhtml+xml,application/xml; q=0.9,*/*; q=0.8',
'Content-Type': 'application/x-www-form-urlencoded'
}
# we group the form fields and their values in a list (any
# iterable, actually) of name-value tuples. This helps
# with clarity and also makes it easy to later encoding of them.
formFields = (
# the viewstate is actualy 800+ characters in length! I truncated it
# for this sample code. It can be lifted from the first page
# obtained from the site. It may be ok to hardcode this value, or
# it may have to be refreshed each time / each day, by essentially
# running an extra page request and parse, for this specific value.
(r'__VSTATE', r'7TzretNIlrZiKb7EOB3AQE ... ...2qd6g5xD8CGXm5EftXtNPt+H8B'),
# following are more of these ASP form fields
(r'__VIEWSTATE', r''),
(r'__EVENTVALIDATION', r'/wEWDwL+raDpAgKnpt8nAs3q+pQOAs3q/pQOAs3qgpUOAs3qhpUOAoPE36ANAve684YCAoOs79EIAoOs89EIAoOs99EIAoOs39EIAoOs49EIAoOs09EIAoSs99EI6IQ74SEV9n4XbtWm1rEbB6Ic3/M='),
(r'ctl00_RadScriptManager1_HiddenField', ''),
(r'ctl00_tabTop_ClientState', ''),
(r'ctl00_ContentPlaceHolder1_menuMain_ClientState', ''),
(r'ctl00_ContentPlaceHolder1_gridMain_ClientState', ''),
#but then we come to fields of interest: the search
#criteria the collections to search from etc.
# Check boxes
(r'ctl00$ContentPlaceHolder1$chkOptions$0', 'on'), # file number
(r'ctl00$ContentPlaceHolder1$chkOptions$1', 'on'), # Legislative text
(r'ctl00$ContentPlaceHolder1$chkOptions$2', 'on'), # attachement
# etc. (not all listed)
(r'ctl00$ContentPlaceHolder1$txtSearch', 'york'), # Search text
(r'ctl00$ContentPlaceHolder1$lstYears', 'All Years'), # Years to include
(r'ctl00$ContentPlaceHolder1$lstTypeBasic', 'All Types'), #types to include
(r'ctl00$ContentPlaceHolder1$btnSearch', 'Search Legislation') # Search button itself
)
# these have to be encoded
encodedFields = urllib.urlencode(formFields)
req = urllib2.Request(uri, encodedFields, headers)
f= urllib2.urlopen(req) #that's the actual call to the http site.
# *** here would normally be the in-memory parsing of f
# contents, but instead I store this to file
# this is useful during design, allowing to have a
# sample of what is to be parsed in a text editor, for analysis.
try:
fout = open('tmp.htm', 'w')
except:
print('Could not open output file\n')
fout.writelines(f.readlines())
fout.close()
就是为了获得初始页面。如上所述,然后需要解析页面,即找到感兴趣的部分并适当地收集它们,并将它们存储到文件/数据库/任何地方。可以通过很多方法来完成这项工作:使用html解析器或XSLT类型的技术(实际上是将html解析为xml之后),甚至对于简单的工作,也可以使用简单的正则表达式。同样,一个通常提取的项目之一是“下一个信息”,即各种链接,可用于对服务器的新请求中以获取后续页面。
这应该使您大致了解“长手”
html刮擦的含义。还有许多其他方法,例如专用工具,Mozilla(FireFox)GreaseMonkey插件中的脚本,XSLT …
我想在ASP.NET中包含其他aspx文件到主aspx文件,我可以在jsp中这样做,jsp中的代码包括
我正在抓取一个aspx呈现的网页链接到页面 网站是. aspx,我选择了Selenium,机械化,urllib,lxml,美丽的汤,请求。也用了scrapy。 我使用了以下请求: 它给 也试过用机械化,刮擦。他们都只是给出这个结果。如何刮那些网站。但是我可以在浏览器中看到源代码。有没有办法收集那些数据。
我对ASP.NET很陌生,我正试图创建一个学习网站。我在用PHP开发网站,在这里我使用< code >在主页面中包含了另一个PHP文件 我在某个地方看到了这个代码,但它不起作用。
问题内容: 所以我想要实现的是与每个索引的自定义可搜索字段部分匹配。我生成一个带有要搜索的值的值,如果该值不止一个单词,则每个单词又生成另一个值(我可以使用,但它有错误,或者具有未记录的设置)。 在这种情况下,我正在寻找;查询如下所示: 我的目标搜索是获取首先具有的结果,然后搜索just 或。 此示例返回4个具有的结果,然后是仅具有的结果,然后是个更多的结果。 如何提高具有完整搜索值的结果?(“电
问题内容: 我正在查看一些旧代码,这些代码只能一次使用。 MyPage.aspx: 和: 后面的代码: 但是在第一个摘录中,Chrome会报告: 未定义PageMethods 谁能看到为防止这种情况发生了什么变化? 注意:我发现了类似的问题,但它们似乎都与此代码有关,无法在母版页或用户控件中使用,在这里不是这种情况。 问题答案: 实际上只有一个方法相互作用被子类,及归属作为。 有2个,也需要是。
我正在使用视频标签播放我的项目中的视频,我想它只播放mp4。它在chrome中播放有一点滞后,但在ie或Firefox中不播放。我想知道是否有一个简单的修复或更好的嵌入vlc播放器。 并在后端为源设置src。