我想用 python 从这个网站抓取:http://www.ssa.gov/oact/babynames/#ht=1
在底部的名称表下方,有三个选项卡。我希望将帖子发布到“按出生年份列出的流行名字”选项卡下的表单。
这是我的代码:
from bs4 import BeautifulSoup
import requests
url = "http://www.ssa.gov/oact/babynames/"
payload = {
'year': 2010,
'top': 50
}
r = requests.post(url, data=payload)
# returns status 200
soup = BeautifulSoup(r.text)
print soup.prettify()
这仅返回原始页面,而不是我正在查找的生成页面。
不返回生成页面的原因可能是什么?
谢谢!
最佳答案
您需要将 POST
请求的 URL 更改为 http://www.ssa.gov/cgi-bin/popularnames.cgi .
演示:
>>> from bs4 import BeautifulSoup
>>> import requests
>>> url = "http://www.ssa.gov/cgi-bin/popularnames.cgi"
>>> payload = {
... 'year': 2010,
... 'top': 50
... }
>>> r = requests.post(url, data=payload)
>>> soup = BeautifulSoup(r.text)
>>> table = soup.find('table', summary='Popularity for top 50')
>>> for row in table.find_all('tr')[1:4]:
... print [td.text for td in row.find_all('td')]
...
[u'1', u'Jacob', u'Isabella']
[u'2', u'Ethan', u'Sophia']
[u'3', u'Michael', u'Emma']
关于python - 请求在表单上发布不返回生成的页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24087613/