Hyu*_*yun 6 python firebug cgi urllib web-scraping
我是Python(和网络抓取)的新手.让我问你一个问题.
许多网站实际上并未在Firefox或其他浏览器中报告其特定URL.例如,社会安全管理员显示具有等级的流行婴儿名字(自1880年以来),但当我将年份从1880年改为1881年时,网址不会改变.它是不断的,
http://www.ssa.gov/cgi-bin/popularnames.cgi
因为我不知道具体的URL,所以我无法使用urllib下载网页.
在此页面源中,它包括:
<input type="text" name="year" id="yob" size="4" value="1880">
所以,假设我可以控制这个"年"值(比如"1881"或"1991"),我可以解决这个问题.我对吗?我还是不知道怎么做.
有人可以告诉我解决方案吗?
如果您了解一些可能有助于我学习的网站,请告知我们.
谢谢!
你仍然可以使用urllib.该按钮对当前URL执行POST.使用Firefox的Firebug的我看了一下网络流量,发现他们发出3个参数:member,top,和year.您可以发送相同的参数:
import urllib
url = 'http://www.ssa.gov/cgi-bin/popularnames.cgi'
post_params = { # member was blank, so I'm excluding it.
'top' : '25',
'year' : year
}
post_args = urllib.urlencode(post_params)
Run Code Online (Sandbox Code Playgroud)
现在,只需发送url编码的参数:
urllib.urlopen(url, post_args)
Run Code Online (Sandbox Code Playgroud)
如果您还需要发送标头:
headers = {
'Accept' : 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language' : 'en-US,en;q=0.5',
'Connection' : 'keep-alive',
'Host' : 'www.ssa.gov',
'Referer' : 'http://www.ssa.gov/cgi-bin/popularnames.cgi',
'User-Agent' : 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:21.0) Gecko/20100101 Firefox/21.0'
}
# With POST data:
urllib.urlopen(url, post_args, headers)
Run Code Online (Sandbox Code Playgroud)
在循环中执行代码:
for year in xrange(1880, 2014):
# The above code...
Run Code Online (Sandbox Code Playgroud)