繁体   English   中英

网址未定义页码时,如何抓取多个页面?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM