如何在Python中抓取ASP网页?

时间:2017-09-20 00:44:03

标签: python asp.net python-3.x web-scraping beautifulsoup

In this video, I give you a look at the dataset I want to scrape/take from the web. Very sorry about the audio, but did the best with what I have.我很难描述我想要做的事情,因为我看到一个包含数千页的页面,显然有表格,但pd.read_html不起作用!直到它打到我,这个页面有一个表格首先填写....

https://opir.fiu.edu/instructor_eval.asp

转到此链接将允许您选择一个学期,并且这样做将显示数千个表。我选择了一个希望阅读HTML的学期后尝试使用该URL,但没有这样的运气..我仍然不知道我甚至在看什么(比如,它是一个网页,还是ASP)什么甚至是ASP?)。如果您关注视频链接,如果您选择春季学期,复制链接并将其放入搜索栏,您会发现它会出现一个难看的错误。一些SQL错误。 所以这就是我的困境。我试图获取这些数据......所有这些表格。我做的最后一篇文章,我做了一个蛮力尝试通过点击和拖动10+分钟,然后粘贴到excel得到他们。这是一种糟糕的方式,当我将excel表格导入python时,它甚至不是特别有用,因为数据非常难以使用。非常非结构化。所以我想,嘿,为什么不用bs4刮?看起来也不是那么容易,因为URL不起作用。过滤到春季学期后,URL只是不起作用,而不是你,如果你将它粘贴到python中以供bs4使用... 因此,我对如何合理使用这些数据感到茫然。我想用bs4抓它,然后把它放到数据帧中以便以后操作。但是,因为它是ASP或其他任何东西,我还无法找到一种方法:\

1 个答案:

答案 0 :(得分:-1)

ASP代表Active Server Pages,是一个运行服务器端脚本(通常是vbs)的页面,所以这不应该与您有关,因为您要从呈现的页面中抓取数据。
为了从/instructor_evals/instr_eval_result.asp获得有效回复,您必须提交表单数据为/instructor_eval.asp的POST请求,否则页面将返回错误消息。
如果您使用urllib提交正确的数据,则应该可以使用bs4获取表格。

from urllib.request import urlopen, Request
from urllib.parse import urlencode
from bs4 import BeautifulSoup

url = 'https://opir.fiu.edu/instructor_evals/instr_eval_result.asp'
data = {'Term':'1171', 'Coll':'%', 'Dept':'','RefNum':'','Crse':'','Instr':''}
r = urlopen(Request(url, data=urlencode(data).encode()))
html = r.read().decode('utf-8', 'ignore')
soup = BeautifulSoup(html, 'html.parser')
tables = soup.find_all('table')

顺便说一下,这个错误消息强烈表明页面容易受到SQL Injection的攻击,这是一个非常讨厌的错误,我认为你应该通知管理员。