| @@ -33,6 +33,7 @@ from youtube_dl.utils import ( | |||||||
|     ExtractorError, |     ExtractorError, | ||||||
|     find_xpath_attr, |     find_xpath_attr, | ||||||
|     fix_xml_ampersands, |     fix_xml_ampersands, | ||||||
|  |     get_element_by_class, | ||||||
|     InAdvancePagedList, |     InAdvancePagedList, | ||||||
|     intlist_to_bytes, |     intlist_to_bytes, | ||||||
|     is_html, |     is_html, | ||||||
| @@ -991,5 +992,13 @@ The first line | |||||||
|         self.assertEqual(urshift(3, 1), 1) |         self.assertEqual(urshift(3, 1), 1) | ||||||
|         self.assertEqual(urshift(-3, 1), 2147483646) |         self.assertEqual(urshift(-3, 1), 2147483646) | ||||||
|  |  | ||||||
|  |     def test_get_element_by_class(self): | ||||||
|  |         html = ''' | ||||||
|  |             <span class="foo bar">nice</span> | ||||||
|  |         ''' | ||||||
|  |  | ||||||
|  |         self.assertEqual(get_element_by_class('foo', html), 'nice') | ||||||
|  |         self.assertEqual(get_element_by_class('no-such-class', html), None) | ||||||
|  |  | ||||||
| if __name__ == '__main__': | if __name__ == '__main__': | ||||||
|     unittest.main() |     unittest.main() | ||||||
|   | |||||||
| @@ -310,9 +310,17 @@ def get_element_by_id(id, html): | |||||||
|     return get_element_by_attribute('id', id, html) |     return get_element_by_attribute('id', id, html) | ||||||
|  |  | ||||||
|  |  | ||||||
| def get_element_by_attribute(attribute, value, html): | def get_element_by_class(class_name, html): | ||||||
|  |     return get_element_by_attribute( | ||||||
|  |         'class', r'[^\'"]*\b%s\b[^\'"]*' % re.escape(class_name), | ||||||
|  |         html, escape_value=False) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | def get_element_by_attribute(attribute, value, html, escape_value=True): | ||||||
|     """Return the content of the tag with the specified attribute in the passed HTML document""" |     """Return the content of the tag with the specified attribute in the passed HTML document""" | ||||||
|  |  | ||||||
|  |     value = re.escape(value) if escape_value else value | ||||||
|  |  | ||||||
|     m = re.search(r'''(?xs) |     m = re.search(r'''(?xs) | ||||||
|         <([a-zA-Z0-9:._-]+) |         <([a-zA-Z0-9:._-]+) | ||||||
|          (?:\s+[a-zA-Z0-9:._-]+(?:=[a-zA-Z0-9:._-]*|="[^"]*"|='[^']*'))*? |          (?:\s+[a-zA-Z0-9:._-]+(?:=[a-zA-Z0-9:._-]*|="[^"]*"|='[^']*'))*? | ||||||
| @@ -321,7 +329,7 @@ def get_element_by_attribute(attribute, value, html): | |||||||
|         \s*> |         \s*> | ||||||
|         (?P<content>.*?) |         (?P<content>.*?) | ||||||
|         </\1> |         </\1> | ||||||
|     ''' % (re.escape(attribute), re.escape(value)), html) |     ''' % (re.escape(attribute), value), html) | ||||||
|  |  | ||||||
|     if not m: |     if not m: | ||||||
|         return None |         return None | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Yen Chi Hsuan
					Yen Chi Hsuan