Hay*_*iff 5 python curl http python-requests
我正在尝试使用 python 脚本来抓取政府网站上的一些页面。我让它访问一个在我的网络浏览器中加载正常网页的 URL,但由于某种原因,该脚本得到一个“访问被拒绝”页面而不是预期的页面。
此外,这个“拒绝访问”错误与我在政府网站上见过的任何错误都不同。除了我的 python 脚本之外,我无法通过任何方式实现此错误。
这是我的脚本的精简版本(它相当大,所以我删除了我认为不相关的部分):
import requests
headers = {
'Accept': "*/*",
'User-Agent': "nyc_contractors.py",
'X-Love': "hey sysadmin! you're awesome! <3"
}
print "and we're off!"
qLicensetype="C"
qBizname = "a"
baseUrl = "http://a810-bisweb.nyc.gov/bisweb/ResultsByNameServlet?bizname="+qBizname+"&licensetype="+qLicensetype
nextUrl = baseUrl
while nextUrl != None:
print
print "URL:", nextUrl
r = requests.get(nextUrl, headers=headers)
nextUrl = None # kill the url (if there's a next page, we'll restore the url later)
print "actual url:",r.url
lines = r.text.splitlines()
for line in lines:
print "L:", line
Run Code Online (Sandbox Code Playgroud)
这是运行该脚本的日志输出:
and we're off!
URL: http://a810-bisweb.nyc.gov/bisweb/ResultsByNameServlet?bizname=a&licensetype=C
actual url: http://a810-bisweb.nyc.gov/bisweb/ResultsByNameServlet?bizname=a&licensetype=C
L: <HTML><HEAD>
L: <TITLE>Access Denied</TITLE>
L: </HEAD><BODY>
L: <H1>Access Denied</H1>
L:
L: You don't have permission to access "http://a810-bisweb.nyc.gov/bisweb/ResultsByNameServlet?" on this server.<P>
L: Reference #18.85600317.1438181595.a09a236f
L: </BODY>
L: </HTML>
Run Code Online (Sandbox Code Playgroud)
为了便于阅读,该错误页面基本上如下所示:
拒绝访问
您无权访问“ http://a810-bisweb.nyc.gov/bisweb/ResultsByNameServlet?” 在此服务器上。
参考#18.85600317.1438181008.a0891486
需要注意的一些事项:
有谁知道问题可能是什么?非常感谢。
编辑:我忘记提及的事情。我注意到它处理多个请求的速度比看起来可行的速度要快,所以我想它可能以某种方式连接到本地计算机上运行的 Web 服务器,但我没有看到任何看起来像是我的源中的请求。本地服务器的访问日志。
编辑:@Alik 建议我在启用日志记录的情况下重新运行本地脚本,因此输出如下:
URL: http://a810-bisweb.nyc.gov/bisweb/ResultsByNameServlet?bizname=s&licensetype=B
INFO:urllib3.connectionpool:Starting new HTTP connection (1): a810-bisweb.nyc.gov
DEBUG:urllib3.connectionpool:"GET /bisweb/ResultsByNameServlet?bizname=s&licensetype=B HTTP/1.1" 403 309
actual url: http://a810-bisweb.nyc.gov/bisweb/ResultsByNameServlet?bizname=s&licensetype=B
L: <HTML><HEAD>
L: <TITLE>Access Denied</TITLE>
L: </HEAD><BODY>
L: <H1>Access Denied</H1>
L:
L: You don't have permission to access "http://a810-bisweb.nyc.gov/bisweb/ResultsByNameServlet?" on this server.<P>
L: Reference #18.85600317.1438184686.a0f4b341
L: </BODY>
L: </HTML>
Run Code Online (Sandbox Code Playgroud)
好吧,这是最愚蠢的问题,我真的不明白为什么会发生这种情况,但我解决了。不管怎样,我帖子中的脚本是有效的,因为我不小心将我的用户代理更改为“nyc_contractors.py”。该脚本在我这边失败了,因为在我运行的实际版本中,我有“nyc_contractor_scraper.py”,并且由于某种原因它不喜欢那个特定的用户代理(也许它会将“scraper”列入黑名单?谁知道)
| 归档时间: |
|
| 查看次数: |
5177 次 |
| 最近记录: |