49 lines
1.5 KiB
Python
49 lines
1.5 KiB
Python
|
from bs4 import BeautifulSoup
|
||
|
|
||
|
|
||
|
class GClasses:
|
||
|
"""A class for tracking obfuscated class names used in Google results that
|
||
|
are directly referenced in Whoogle's filtering code.
|
||
|
|
||
|
Note: Using these should be a last resort. It is always preferred to filter
|
||
|
results using structural cues instead of referencing class names, as these
|
||
|
are liable to change at any moment.
|
||
|
"""
|
||
|
main_tbm_tab = 'KP7LCb'
|
||
|
images_tbm_tab = 'n692Zd'
|
||
|
footer = 'TuS8Ad'
|
||
|
result_class_a = 'ZINbbc'
|
||
|
result_class_b = 'luh4td'
|
||
|
scroller_class = 'idg8be'
|
||
|
line_tag = 'BsXmcf'
|
||
|
|
||
|
result_classes = {
|
||
|
result_class_a: ['Gx5Zad'],
|
||
|
result_class_b: ['fP1Qef']
|
||
|
}
|
||
|
|
||
|
@classmethod
|
||
|
def replace_css_classes(cls, soup: BeautifulSoup) -> BeautifulSoup:
|
||
|
"""Replace updated Google classes with the original class names that
|
||
|
Whoogle relies on for styling.
|
||
|
|
||
|
Args:
|
||
|
soup: The result page as a BeautifulSoup object
|
||
|
|
||
|
Returns:
|
||
|
BeautifulSoup: The new BeautifulSoup
|
||
|
"""
|
||
|
result_divs = soup.find_all('div', {
|
||
|
'class': [_ for c in cls.result_classes.values() for _ in c]
|
||
|
})
|
||
|
|
||
|
for div in result_divs:
|
||
|
new_class = ' '.join(div['class'])
|
||
|
for key, val in cls.result_classes.items():
|
||
|
new_class = ' '.join(new_class.replace(_, key) for _ in val)
|
||
|
div['class'] = new_class.split(' ')
|
||
|
return soup
|
||
|
|
||
|
def __str__(self):
|
||
|
return self.value
|