【发布时间】:2014-04-25 21:10:58
【问题描述】:
尝试编写一个小爬虫来提取 marathonguide.com 上列出的马拉松比赛的完赛结果,但无法重定向以显示正确的页面。
网站上的导航很简单:
- 活动页面:http://www.marathonguide.com/results/browse.cfm?MIDD=472131103
- 表单 POST(示例):Gen='B',Begin=201,End=300,Max=50062
- 发布网址:http://www.marathonguide.com/results/makelinks.cfm
- 结果页面:http://www.marathonguide.com/results/browse.cfm?MIDD=472131103&Gen=B&Begin=201&End=300&Max=50062
当我遵循标准表单提交导航时,此结果页面仅显示整理器数据。但是,如果我刷新此页面,或直接输入 URL,则 URL 将反映结果页面,但会显示 事件页面。
这是我的代码:
import requests
from bs4 import BeautifulSoup
marathon = 'http://www.marathonguide.com/results/browse.cfm?MIDD=472131103'
s = requests.session()
p = s.get(marathon)
race_range = 'B,201,300,50062'
rp = 'http://www.marathonguide.com/results/makelinks.cfm'
data = {'RaceRange':race_range, 'RaceRange_Required':'You must make a selection before viewing results.', 'MIDD':'472131103', 'SubmitButton':'View'}
results = s.post(rp, data=data)
print results.status_code
print results.url
print results.text
>>> 200
>>> http://www.marathonguide.com/results/browse.cfm?MIDD=472131103&Gen=B&Begin=201&End=300&Max=50062
>>> HTML from http://www.marathonguide.com/results/browse.cfm?MIDD=472131103
根据我得到的 HTML,我被发送回事件页面,想知道为什么服务器不喜欢我的 POST。辩论使用 selenium 来模拟用户体验,但我确信我的请求代码中缺少一些小东西。
编辑:根据反馈我更新了问题以反映我的实际代码。
【问题讨论】:
-
在 SO 中允许共享 URL。但是,请注意,如果这是您正在编写的专有代码(例如,对于您的公司),或者该站点是私有网络(您将其开放给外部访问)。否则,它是相当安全的。大量的 URL 一直在共享。也就是说,我想你最好分享它,以便我们检查它。 :)
-
感谢@Nanashi,相应地更新了我的问题。
-
抱歉回复晚了,一会儿再发一个答案。 :)
标签: python web-scraping beautifulsoup python-requests