当 url 未定义页码时,如何抓取多个页面?



我想从网站的第二页中获取HTML。我已经习惯了显示页码的URL,让我通过操作来刮擦多个页面。

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要简单得多。

查看练习1329。就在您的美丽汤中(。有一个称为 refreshFinderResultSet的函数,其中的ajax调用应该让您开始。

最新更新