urllib 中 http://www.ssa.gov/cgi-bin/popularnames.cgi 的(可能是基本的)网络抓取
·
问题:urllib 中 http://www.ssa.gov/cgi-bin/popularnames.cgi 的(可能是基本的)网络抓取
我对 Python(和网络抓取)非常陌生。让我问你一个问题。
许多网站实际上并没有在 Firefox 或其他浏览器中报告其特定的 URL。例如,Social Security Admin 显示带有排名的流行婴儿名字(自 1880 年以来),但是当我将年份从 1880 更改为 1881 时,url 并没有改变。它是不断的,
http://www.ssa.gov/cgi-bin/popularnames.cgi
因为不知道具体的网址,所以无法使用 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)
现在,只需发送 url 编码的参数:
urllib.urlopen(url, post_args)
如果您还需要发送标头:
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)
循环执行代码:
for year in xrange(1880, 2014):
# The above code...
更多推荐
所有评论(0)