[英]How do I scrape multiple pages when the url doesn't define the page number?
我想从网站的第二页获取html。 我习惯于显示页码的网址,并通过操纵该网址来抓取多个页面。
my_url = 'https://www.bodybuilding.com/exercises/finder/lookup/filter/muscle/id/1/muscle/chest'
headers = {'referer':my_url,
'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36',
'x-requested-with':'XMLHttpRequest'}
payload = {'orderByField':'exerciseName',
'orderByDirection':'ASC',
'page':30}
params = {'muscleID':1,
'exerciseTypeID':[2,6,4,7,1,3,5],
'equipmentID':[9,14,2,10,5,6,4,15,1,8,11,3,7],
'mechanicTypeID':[1,2,11]}
r = requests.post(my_url, data=payload, headers=headers, params=params, verify=True)
soup = bs(r.text, 'html.parser')
这是一个非常有趣的问题。 如果检查页面,您会发现分页是由javascript驱动的,而不是直接来自任何服务器提供的API。 但是,如果您深入研究调用堆栈,则会显示其内部API。 这意味着(对您来说很幸运),答案比试图以某种方式呈现页面/在您的python脚本中运行javascript w /要简单得多。
请查看ExerciseUtil.js ,第1329行。这应该使您开始使用基于JSON的API(开始使用时会注意到,该API仍在JSON中提供HTML字符串,因此它应该适合您漂亮的汤设置)。 有一个名为refreshFinderResultSet
的函数,该函数内部的ajax调用可以帮助您入门。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.