def _parse_multiple_apps(self, list_response):
"""Extracts app ids from a list's Response object, sends GET requests to
each app, parses detailed info and returns all apps in a list.
:param list_response: the Response object from a list request
:return: a list of app dictionaries
"""
list_strainer = SoupStrainer('span', {'class': 'preview-overlay-container'})
soup = BeautifulSoup(list_response.content, 'lxml', parse_only=list_strainer)
app_ids = [x.attrs['data-docid'] for x in soup.select('span.preview-overlay-container')]
responses = multi_app_request(app_ids)
app_strainer = SoupStrainer('div', {'class': 'main-content'})
apps = []
errors = []
for i, r in enumerate(responses):
if r is not None and r.status_code == requests.codes.ok:
soup = BeautifulSoup(r.content, 'lxml', parse_only=app_strainer)
apps.append(self._parse_app_details(soup))
else:
errors.append(app_ids[i])
if errors:
self._log.error("There was an error parsing the following apps: {errors}.".format(
errors=", ".join(errors)))
return apps
评论列表
文章目录