我想从以下网站收集有关职位空缺的数据:https://www.olx.pl/praca/。目前,该网站上发布了大约 67,911 个职位空缺。然而,25 个页面中只能访问 1,000 个职位空缺。我只能滚动浏览前 25 页,因为第 26 页不存在。我尝试使用静态和动态工具(例如 Selenium)进行抓取,但只能检索前 25 页。最终,我发现了一个隐藏的 API,并且能够直接发出 GET 请求:
url = 'https://www.olx.pl/api/v1/offers/?offset=900&limit=50&category_id=2445&filter_refiners=spell_checker&sl=194242d7550x83b6c66'
response = requests.get(url = url)
print(response.status_code)
data = response.json()
titles = [item['title'] for item in data.get('data', [])]
titles
但是当我尝试超过25页和1,000个职位空缺的限制(offset=1100&limit=50)时,服务器返回以下错误:
{'error': {'status': 400,
'code': 400,
'title': 'Invalid request',
'detail': 'Data validation error occurred',
'validation': [{'field': 'offset',
'title': 'This value should be between 0 and 1000.',
'detail': 'This value should be between 0 and 1000.'}]}}
对于职位空缺数量少于 1,000 个的类别,全部均可访问。然而,对于少数超过 1,000 个职位空缺的类别,网站只显示 1,000 个随机职位空缺。
我发现的唯一解决方案是将请求分成更窄的组(例如按类别和地区),确保几乎所有组合包含的职位空缺少于 1,000 个。
问题:我正在寻找一种方法来收集所有职位空缺,而不将它们分成更小的组。我可能不完全理解该网站的限制是如何运作的。如果有任何帮助、参考资料或教程,我将不胜感激。
PS。公共 API 允许创建新职位空缺,但不提供收集现有职位空缺数据的方法。
希望我的回答对您有所帮助,因为我有超过 4 年的网页抓取经验。
分页限制是固定的(95%的时间),很少你可以绕过 这个限制是通过访问API来实现的(只是后端开发者 忘记严格分页) 块引用
顺便深入了解 API,干得好
但是,一旦达到限制,并且 API 方法失败,您所要做的就是使用过滤器。
filter by price, salary, location, ...etc
try to find the smallest filter in results that would return <1000 results or <25 pages.
是的,循环、抓取等需要更多时间 这是获得最大结果的最有效方法。
过去我必须按价格过滤房产并增加过滤器 1 欧元。