| @@ -33,6 +33,7 @@ from youtube_dl.utils import ( | ||||
|     ExtractorError, | ||||
|     find_xpath_attr, | ||||
|     fix_xml_ampersands, | ||||
|     get_element_by_class, | ||||
|     InAdvancePagedList, | ||||
|     intlist_to_bytes, | ||||
|     is_html, | ||||
| @@ -991,5 +992,13 @@ The first line | ||||
|         self.assertEqual(urshift(3, 1), 1) | ||||
|         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__': | ||||
|     unittest.main() | ||||
|   | ||||
| @@ -310,9 +310,17 @@ def get_element_by_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""" | ||||
|  | ||||
|     value = re.escape(value) if escape_value else value | ||||
|  | ||||
|     m = re.search(r'''(?xs) | ||||
|         <([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*> | ||||
|         (?P<content>.*?) | ||||
|         </\1> | ||||
|     ''' % (re.escape(attribute), re.escape(value)), html) | ||||
|     ''' % (re.escape(attribute), value), html) | ||||
|  | ||||
|     if not m: | ||||
|         return None | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Yen Chi Hsuan
					Yen Chi Hsuan