diff --git a/addons21/fastwq/service/dict/cambridge.py b/addons21/fastwq/service/dict/cambridge.py
index 8243b3b..42be6a8 100644
--- a/addons21/fastwq/service/dict/cambridge.py
+++ b/addons21/fastwq/service/dict/cambridge.py
@@ -2,6 +2,8 @@
import os
import re
+from bs4 import Tag
+
from ..base import *
cambridge_url_base = u'https://dictionary.cambridge.org/'
@@ -68,21 +70,35 @@ class Cambridge(WebService):
if pos_2 is not None:
pos_gram = (pos_2.get_text() if pos_2 else '') + (gram_2.get_text() if gram else '')
- dbs = sense.find_all('div', class_='def-block pad-indent')
+ sense_body = sense.find('div', class_='sense-body')
- if dbs:
+ if sense_body:
l = result['def_list']
- for db in dbs:
- i = sense.find('span', class_='def-info')
- d = db.find('b', class_='def')
- tran = db.find('span', class_='trans')
- examps = db.find_all('div', class_='examp emphasized')
- l.append(
- u'
{0}{1}{2} {3}{4}'.format(
- '{0}'.format(pos_gram),
+ phrase_name = None
+ for block in sense_body:
+ if isinstance(block, Tag) is not True:
+ continue
- u'{0}'.format(i.get_text()) if i else u'',
- u'{0}'.format(d.get_text()) if d else u'',
+ block_type = block['class'][0]
+ if block_type == 'def-block':
+ pass
+ elif block_type == 'phrase-block':
+ phrase_title = block.find('span', class_='phrase-title')
+ phrase_name = phrase_title.get_text() if phrase_title else None
+ pass
+ else:
+ continue
+
+ i = block.find('span', class_='def-info')
+ d = block.find('b', class_='def')
+ tran = block.find('span', class_='trans')
+ examps = block.find_all('div', class_='examp emphasized')
+ l.append(
+ u'{0}{1}{2}{3} {4}{5}'.format(
+ '{0}'.format(pos_gram),
+ '{0}'.format(phrase_name) if phrase_name else '',
+ '{0}'.format(i.get_text()) if i else '',
+ '{0}'.format(d.get_text()) if d else u'',
u'{0}'.format(tran.get_text()) if tran else u'',
u''.join(