HEX
Server: Apache
System: Linux vps.rockyroadprinting.net 4.18.0 #1 SMP Mon Sep 30 15:36:27 MSK 2024 x86_64
User: rockyroadprintin (1011)
PHP: 8.2.29
Disabled: exec,passthru,shell_exec,system
Upload Files
File: //lib/python2.7/site-packages/bs4/element.pyo
�
6eb[c@s�dZyddlmZWn#ek
r?ZddlmZnXddlZddlZddlZddl	Z	ddl
mZdZej
ddkZejd�Zd	�Zd
efd��YZdefd
��YZdefd��YZdefd��YZdefd��YZdefd��YZdefd��YZdefd��YZdefd��YZdefd��YZdefd��YZd efd!��YZd"eefd#��YZ d$e fd%��YZ!d&e!fd'��YZ"d(e!fd)��YZ#d*e#fd+��YZ$d,e!fd-��YZ%d.e!fd/��YZ&d0e!fd1��YZ'd2efd3��YZ(d4efd5��YZ)d6e*fd7��YZ+dS(8tMITi����(tCallableN(tEntitySubstitutionsutf-8iis\s+cs1t�fd��}|j�fd��}|S(s>Alias one attribute name to another for backward compatibilitycs
t|��S(N(tgetattr(tself(tattr(s//usr/lib/python2.7/site-packages/bs4/element.pytaliasscs
t|��S(N(tsetattr(R(R(s//usr/lib/python2.7/site-packages/bs4/element.pyRs(tpropertytsetter(RR((Rs//usr/lib/python2.7/site-packages/bs4/element.pyt_aliasstNamespacedAttributecBseZdd�ZRS(cCs{|dkr!tj||�}n;|dkrBtj||�}ntj||d|�}||_||_||_|S(Nt:(tNonetunicodet__new__tprefixtnamet	namespace(tclsRRRtobj((s//usr/lib/python2.7/site-packages/bs4/element.pyR"s			N(t__name__t
__module__R
R(((s//usr/lib/python2.7/site-packages/bs4/element.pyR st%AttributeValueWithCharsetSubstitutioncBseZdZRS(s=A stand-in object for a character encoding specified in HTML.(RRt__doc__(((s//usr/lib/python2.7/site-packages/bs4/element.pyR/stCharsetMetaAttributeValuecBs eZdZd�Zd�ZRS(s�A generic stand-in for the value of a meta tag's 'charset' attribute.

    When Beautiful Soup parses the markup '<meta charset="utf8">', the
    value of the 'charset' attribute will be one of these objects.
    cCstj||�}||_|S(N(RRtoriginal_value(RRR((s//usr/lib/python2.7/site-packages/bs4/element.pyR9s	cCs|S(N((Rtencoding((s//usr/lib/python2.7/site-packages/bs4/element.pytencode>s(RRRRR(((s//usr/lib/python2.7/site-packages/bs4/element.pyR2s	tContentMetaAttributeValuecBs5eZdZejdej�Zd�Zd�ZRS(sA generic stand-in for the value of a meta tag's 'content' attribute.

    When Beautiful Soup parses the markup:
     <meta http-equiv="content-type" content="text/html; charset=utf8">

    The value of the 'content' attribute will be one of these objects.
    s((^|;)\s*charset=)([^;]*)cCsM|jj|�}|dkr.tjt|�Stj||�}||_|S(N(t
CHARSET_REtsearchR
RRR(RRtmatchR((s//usr/lib/python2.7/site-packages/bs4/element.pyRMs	cs%�fd�}|jj||j�S(Ncs|jd��S(Ni(tgroup(R (R(s//usr/lib/python2.7/site-packages/bs4/element.pytrewriteXs(RtsubR(RRR"((Rs//usr/lib/python2.7/site-packages/bs4/element.pyRWs(	RRRtretcompiletMRRR(((s//usr/lib/python2.7/site-packages/bs4/element.pyRBs	
tHTMLAwareEntitySubstitutioncBsneZdZeddg�Zedg�Zeddg�Zed��Zed��Z	ed��Z
RS(s%Entity substitution rules that are aware of some HTML quirks.

    Specifically, the contents of <script> and <style> tags should not
    undergo entity substitution.

    Incoming NavigableString objects are checked to see if they're the
    direct children of a <script> or <style> tag.
    tscripttstyletprettextareacCsAt|t�r7|jdk	r7|jj|jkr7|S||�S(N(t
isinstancetNavigableStringtparentR
Rtcdata_containing_tags(Rtnstf((s//usr/lib/python2.7/site-packages/bs4/element.pyt_substitute_if_appropriatems
cCs|j|tj�S(N(R2Rtsubstitute_html(RR0((s//usr/lib/python2.7/site-packages/bs4/element.pyR3wscCs|j|tj�S(N(R2Rtsubstitute_xml(RR0((s//usr/lib/python2.7/site-packages/bs4/element.pyR4|s(RRRtsetR/tpreformatted_tagstpreserve_whitespace_tagstclassmethodR2R3R4(((s//usr/lib/python2.7/site-packages/bs4/element.pyR'\s	
t	FormattercBseZdZdZd�ZRS(s6Contains information about how to format a parse tree.t/cOs
t��dS(s1Transform certain characters into named entities.N(tNotImplementedError(Rtargstkwargs((s//usr/lib/python2.7/site-packages/bs4/element.pytsubstitute_entities�s(RRRtvoid_element_close_prefixR>(((s//usr/lib/python2.7/site-packages/bs4/element.pyR9�st
HTMLFormattercBseZdZd�ZRS(sThe default HTML formatter.cOstj||�S(N(R'R3(RR<R=((s//usr/lib/python2.7/site-packages/bs4/element.pyt
substitute�s(RRRRA(((s//usr/lib/python2.7/site-packages/bs4/element.pyR@�stMinimalHTMLFormattercBseZdZd�ZRS(sA minimal HTML formatter.cOstj||�S(N(R'R4(RR<R=((s//usr/lib/python2.7/site-packages/bs4/element.pyRA�s(RRRRA(((s//usr/lib/python2.7/site-packages/bs4/element.pyRB�stHTML5FormattercBseZdZdZRS(s5An HTML formatter that omits the slash in a void tag.N(RRRR
R?(((s//usr/lib/python2.7/site-packages/bs4/element.pyRC�stXMLFormattercBseZdZd�ZRS(s+Substitute only the essential XML entities.cOstj||�S(N(RR4(RR<R=((s//usr/lib/python2.7/site-packages/bs4/element.pyRA�s(RRRRA(((s//usr/lib/python2.7/site-packages/bs4/element.pyRD�stHTMLXMLFormattercBseZdZd�ZRS(sFormat XML using HTML rules.cOstj||�S(N(R'R3(RR<R=((s//usr/lib/python2.7/site-packages/bs4/element.pyRA�s(RRRRA(((s//usr/lib/python2.7/site-packages/bs4/element.pyRE�stPageElementcBseZdZie�d6e�d6e�d6d2d26Zie�d6e	�d6d2d26Z
dd�Zed��Z
d�Zd2d2d2d2d2d�Zed�Zed	�Zd
�ZeZd�ZeZeZd�Zd
�Zeed�ZeZd�Zd�Zd�Zd�Z d2id2d�Z!e!Z"d2id2d2d�Z#e#Z$d2id2d�Z%e%Z&d2id2d2d�Z'e'Z(e'Z)d2id2d�Z*e*Z+d2id2d2d�Z,e,Z-e,Z.d2id2d�Z/e/Z0d2id2d2d�Z1e1Z2e1Z3d2id�Z4e4Z5d2id2d�Z6e6Z7e6Z8ed��Z9ed��Z:d�Z;d �Z<ed!��Z=ed"��Z>ed#��Z?ed$��Z@ed%��ZAeBjCd&�ZDeBjCd'd(�ZEd2d)�ZFd*�ZGd+d,�ZHd-�ZId.�ZJd/�ZKd0�ZLd1�ZMRS(3seContains the navigational information for some part of the page
    (either a tag or a piece of text)thtmlthtml5tminimalcCsdt|t�r!|j|�}n|dkr6|}n*t|�rQ||�}n|j|�}|S(s2Format the given string using the given formatter.N(R,t
basestringt_formatter_for_nameR
tcallableRA(Rtst	formattertoutput((s//usr/lib/python2.7/site-packages/bs4/element.pyt
format_string�s	cCs?|jdk	r|jS|jdkr5t|dt�S|jjS(sJIs this element part of an XML tree or an HTML tree?

        This is used when mapping a formatter name ("minimal") to an
        appropriate function (one that performs entity-substitution on
        the contents of <script> and <style> tags, or not). It can be
        inefficient, but it should be called very rarely.
        tis_xmlN(t	known_xmlR
R.RtFalset_is_xml(R((s//usr/lib/python2.7/site-packages/bs4/element.pyRT�s
	cCs9|jr|jj|t��S|jj|t��SdS(s<Look up a formatter function based on its name and the tree.N(RTtXML_FORMATTERStgetRDtHTML_FORMATTERSR@(RR((s//usr/lib/python2.7/site-packages/bs4/element.pyRK�s	cCs�||_||_|dk	r-||j_n||_|jrN||j_n||_|jro||j_n|r�|jdk	r�|jjr�|jjd}n||_|r�||j_ndS(sNSets up the initial relations between this element and
        other elements.i����N(R.tprevious_elementR
tnext_elementtnext_siblingtprevious_siblingtcontents(RR.RXRYR[RZ((s//usr/lib/python2.7/site-packages/bs4/element.pytsetup�s 							RZR[cCs|jstd��n||kr(dS||jkrFtd��n|j}|jj|�}|j�|j||�|S(Ns]Cannot replace one element with another when theelement to be replaced is not part of a tree.s%Cannot replace a Tag with its parent.(R.t
ValueErrortindextextracttinsert(Rtreplace_witht
old_parenttmy_index((s//usr/lib/python2.7/site-packages/bs4/element.pyRbs		
cCsl|j}|js!td��n|jj|�}|j�x(t|j�D]}|j||�qNW|S(NsSCannot replace an element with its contents when thatelement is not part of a tree.(R.R^R_R`treversedR\Ra(Rt	my_parentRdtchild((s//usr/lib/python2.7/site-packages/bs4/element.pytunwrap%s		
cCs |j|�}|j|�|S(N(Rbtappend(Rtwrap_insidetme((s//usr/lib/python2.7/site-packages/bs4/element.pytwrap3s
cCs,|jdk	r+|jj|jj|�=n|j�}|j}|jdk	rm|j|k	rm||j_n|dk	r�||jk	r�|j|_nd|_d|_d|_|jdk	r�|j|jk	r�|j|j_n|jdk	r|j|jk	r|j|j_nd|_|_|S(s0Destructively rips this element out of the tree.N(	R.R
R\R_t_last_descendantRYRXR[RZ(Rt
last_childRY((s//usr/lib/python2.7/site-packages/bs4/element.pyR`8s(				cCsp|r|jr|jj}n2|}x)t|t�rO|jrO|jd}q'W|rl||krld}n|S(s8Finds the last element beneath this object to be parsed.i����N(RZRXR,tTagR\R
(Rtis_initializedtaccept_selfRn((s//usr/lib/python2.7/site-packages/bs4/element.pyRmUs	cCs�|dkrtd��n||kr6td��nt|t�rdt|t�rdt|�}nddlm}t||�r�x1t|j�D] }|j	||�|d7}q�WdSt
|t|j��}t|d�r8|j
dk	r8|j
|kr+|j|�}||kr+|d8}q+n|j�n||_
d}|dkrhd|_||_n8|j|d}||_||j_|jt�|_|jdk	r�||j_n|jt�}|t|j�kr\d|_|}d}	x>|	dkr7|dk	r7|j}	|j
}|	dk	r�Pq�q�W|	dk	rP|	|_q�d|_n=|j|}
|
|_|jdk	r�||j_n|
|_|jdk	r�||j_n|jj	||�dS(NsCannot insert None into a tag.s Cannot insert a tag into itself.i����(t
BeautifulSoupiR.i(R
R^R,RJR-tbs4RrtlistR\RatmintlenthasattrR.R_R`R[RXRZRmRSRY(Rtpositiont	new_childRrtsubchildt
current_indextprevious_childtnew_childs_last_elementR.tparents_next_siblingt
next_child((s//usr/lib/python2.7/site-packages/bs4/element.pyRacsh
						
		cCs|jt|j�|�dS(s2Appends the given tag to the contents of this tag.N(RaRvR\(Rttag((s//usr/lib/python2.7/site-packages/bs4/element.pyRi�scCs~||krtd��n|j}|dkr?td��nt|t�r[|j�n|j|�}|j||�dS(s�Makes the given element the immediate predecessor of this one.

        The two elements will have the same parent, and the given element
        will be immediately before this one.
        s&Can't insert an element before itself.s2Element has no parent, so 'before' has no meaning.N(R^R.R
R,RFR`R_Ra(RtpredecessorR.R_((s//usr/lib/python2.7/site-packages/bs4/element.pyt
insert_before�s	
cCs�||krtd��n|j}|dkr?td��nt|t�r[|j�n|j|�}|j|d|�dS(s�Makes the given element the immediate successor of this one.

        The two elements will have the same parent, and the given element
        will be immediately after this one.
        s%Can't insert an element after itself.s1Element has no parent, so 'after' has no meaning.iN(R^R.R
R,RFR`R_Ra(Rt	successorR.R_((s//usr/lib/python2.7/site-packages/bs4/element.pytinsert_after�s	
cKs|j|j||||�S(sjReturns the first item that matches the given criteria and
        appears after this Tag in the document.(t	_find_onet
find_all_next(RRtattrsttextR=((s//usr/lib/python2.7/site-packages/bs4/element.pyt	find_next�scKs|j|||||j|�S(sbReturns all items that match the given criteria and appear
        after this Tag in the document.(t	_find_allt
next_elements(RRR�R�tlimitR=((s//usr/lib/python2.7/site-packages/bs4/element.pyR��scKs|j|j||||�S(s{Returns the closest sibling to this Tag that matches the
        given criteria and appears after this Tag in the document.(R�tfind_next_siblings(RRR�R�R=((s//usr/lib/python2.7/site-packages/bs4/element.pytfind_next_sibling�scKs|j|||||j|�S(sqReturns the siblings of this Tag that match the given
        criteria and appear after this Tag in the document.(R�t
next_siblings(RRR�R�R�R=((s//usr/lib/python2.7/site-packages/bs4/element.pyR��scKs|j|j||||�S(skReturns the first item that matches the given criteria and
        appears before this Tag in the document.(R�tfind_all_previous(RRR�R�R=((s//usr/lib/python2.7/site-packages/bs4/element.pyt
find_previous�scKs|j|||||j|�S(scReturns all items that match the given criteria and appear
        before this Tag in the document.(R�tprevious_elements(RRR�R�R�R=((s//usr/lib/python2.7/site-packages/bs4/element.pyR��scKs|j|j||||�S(s|Returns the closest sibling to this Tag that matches the
        given criteria and appears before this Tag in the document.(R�tfind_previous_siblings(RRR�R�R=((s//usr/lib/python2.7/site-packages/bs4/element.pytfind_previous_siblingscKs|j|||||j|�S(srReturns the siblings of this Tag that match the given
        criteria and appear before this Tag in the document.(R�tprevious_siblings(RRR�R�R�R=((s//usr/lib/python2.7/site-packages/bs4/element.pyR�scKs5d}|j||d|�}|r1|d}n|S(sOReturns the closest parent of this Tag that matches the given
        criteria.iiN(R
tfind_parents(RRR�R=trtl((s//usr/lib/python2.7/site-packages/bs4/element.pytfind_parents

cKs|j||d||j|�S(sFReturns the parents of this Tag that match the given
        criteria.N(R�R
tparents(RRR�R�R=((s//usr/lib/python2.7/site-packages/bs4/element.pyR�!scCs|jS(N(RY(R((s//usr/lib/python2.7/site-packages/bs4/element.pytnext*scCs|jS(N(RX(R((s//usr/lib/python2.7/site-packages/bs4/element.pytprevious.scKs5d}||||d|�}|r1|d}n|S(Nii(R
(RtmethodRR�R�R=R�R�((s//usr/lib/python2.7/site-packages/bs4/element.pyR�4s

cs�|dkr,d|kr,|d}|d=nt�t�rD�}nt�|||�}|dkr&|r&|r&|r&�tks��dkr�d�|D�}t||�St�t�r&�jd�dkr��jdd�\��nd������fd�|D�}t||�Snt|�}	xytr�yt|�}
Wnt	k
r_PnX|
r5|j
|
�}|r�|	j|�|r�t|	�|kr�Pq�q�q5q5W|	S(s8Iterates over a generator looking for things that match.tstringcss$|]}t|t�r|VqdS(N(R,Ro(t.0telement((s//usr/lib/python2.7/site-packages/bs4/element.pys	<genexpr>JsRic3s]|]S}t|t�r'|j�ksQ|j�kr�dksQ|j�kr|VqdS(N(R,RoRR
R(R�R�(t
local_nameRR(s//usr/lib/python2.7/site-packages/bs4/element.pys	<genexpr>Ws
N(
R
R,tSoupStrainertTruet	ResultSetRJtcounttsplitR�t
StopIterationRRiRv(RRR�R�R�t	generatorR=tstrainertresulttresultstitfound((R�RRs//usr/lib/python2.7/site-packages/bs4/element.pyR�;s<

	!
		

ccs.|j}x|dk	r)|V|j}qWdS(N(RYR
(RR�((s//usr/lib/python2.7/site-packages/bs4/element.pyR�qs	ccs.|j}x|dk	r)|V|j}qWdS(N(RZR
(RR�((s//usr/lib/python2.7/site-packages/bs4/element.pyR�xs	ccs.|j}x|dk	r)|V|j}qWdS(N(RXR
(RR�((s//usr/lib/python2.7/site-packages/bs4/element.pyR�s	ccs.|j}x|dk	r)|V|j}qWdS(N(R[R
(RR�((s//usr/lib/python2.7/site-packages/bs4/element.pyR��s	ccs.|j}x|dk	r)|V|j}qWdS(N(R.R
(RR�((s//usr/lib/python2.7/site-packages/bs4/element.pyR��s	s^[a-zA-Z0-9][-.a-zA-Z0-9:_]*$sX^(?P<tag>[a-zA-Z0-9][-.a-zA-Z0-9:_]*)?\[(?P<attribute>[\w-]+)(?P<operator>[=~\|\^\$\*]?)s=?"?(?P<value>[^\]"]*)"?\]$cCsF|j||�}t|t�s0t|t�rBdj|�}n|S(s�Force an attribute value into a string representation.

        A multi-valued attribute will be converted into a
        space-separated stirng.
        t (RVR,Rtttupletjoin(Rtvaluetdefault((s//usr/lib/python2.7/site-packages/bs4/element.pyt_attr_value_as_string�scs$�s
�S��fd�}|SdS(Ncs|j�ko�|�S(N(R(R�(tfunctionttag_name(s//usr/lib/python2.7/site-packages/bs4/element.pyt_match�s((RR�R�R�((R�R�s//usr/lib/python2.7/site-packages/bs4/element.pyt_tag_name_matches_and�stcs�|dkr��fd�S|dkr>��fd�}|S|dkrZ��fd�S|dkrv��fd�S|d	kr���fd
�S|dkr���fd�}|S�fd
�SdS(s�Create a function that performs a CSS selector operation.

        Takes an operator, attribute and optional value. Returns a
        function that will return True for elements that match that
        combination.
        t=cs|j���kS(N(R�(tel(t	attributeR�(s//usr/lib/python2.7/site-packages/bs4/element.pyt<lambda>�st~cs:|j�g�}t|t�s0|j�}n�|kS(N(RVR,RtR�(R�tattribute_value(R�R�(s//usr/lib/python2.7/site-packages/bs4/element.pyt_includes_value�st^cs|j�d�j��S(NR�(R�t
startswith(R�(R�R�(s//usr/lib/python2.7/site-packages/bs4/element.pyR��st$cs|j�d�j��S(NR�(R�tendswith(R�(R�R�(s//usr/lib/python2.7/site-packages/bs4/element.pyR��st*cs�|j�d�kS(NR�(R�(R�(R�R�(s//usr/lib/python2.7/site-packages/bs4/element.pyR��st|cs/|j�d�}|�kp.|j�d�S(NR�t-(R�R�(R�R�(R�R�(s//usr/lib/python2.7/site-packages/bs4/element.pyt_is_or_starts_with_dash�scs
|j��S(N(thas_attr(R�(R�(s//usr/lib/python2.7/site-packages/bs4/element.pyR��sN((RtoperatorR�R�R�R�((R�R�s//usr/lib/python2.7/site-packages/bs4/element.pyt_attribute_checker�scCs|jS(N(R�(R((s//usr/lib/python2.7/site-packages/bs4/element.pyt
nextGenerator�scCs|jS(N(R�(R((s//usr/lib/python2.7/site-packages/bs4/element.pytnextSiblingGenerator�scCs|jS(N(R�(R((s//usr/lib/python2.7/site-packages/bs4/element.pytpreviousGenerator�scCs|jS(N(R�(R((s//usr/lib/python2.7/site-packages/bs4/element.pytpreviousSiblingGenerator�scCs|jS(N(R�(R((s//usr/lib/python2.7/site-packages/bs4/element.pytparentGenerator�sN(NRRRR@RCRBR
RWRERDRURPRRTRKR]R
tnextSiblingtpreviousSiblingRbtreplaceWithRhtreplace_with_childrentreplaceWithChildrenRlR`R�Rmt_lastRecursiveChildRaRiR�R�R�tfindNextR�tfindAllNextR�tfindNextSiblingR�tfindNextSiblingstfetchNextSiblingsR�tfindPreviousR�tfindAllPrevioust
fetchPreviousR�tfindPreviousSiblingR�tfindPreviousSiblingstfetchPreviousSiblingsR�t
findParentR�tfindParentstfetchParentsR�R�R�R�R�R�R�R�R�R$R%ttag_name_retattribselect_reR�R�R�R�R�R�R�R�(((s//usr/lib/python2.7/site-packages/bs4/element.pyRF�s�






							J				
		6		
	+				R-cBskeZdZdZd	Zd�Zd�Zd�Zd�Z	dd�Z
ed��Zej
d��ZRS(
R�cCsGt|t�r$tj||�}ntj||t�}|j�|S(s-Create a new NavigableString.

        When unpickling a NavigableString, this method is called with
        the string in DEFAULT_OUTPUT_ENCODING. That encoding needs to be
        passed in to the superclass's __new__ or the superclass won't know
        how to handle non-ASCII characters.
        (R,RRtDEFAULT_OUTPUT_ENCODINGR](RR�tu((s//usr/lib/python2.7/site-packages/bs4/element.pyR�s

cCst|�|�S(s�A copy of a NavigableString has the same contents and class
        as the original, but it is not connected to the parse tree.
        (ttype(R((s//usr/lib/python2.7/site-packages/bs4/element.pyt__copy__scCs
t|�fS(N(R(R((s//usr/lib/python2.7/site-packages/bs4/element.pyt__getnewargs__scCs0|dkr|Std|jj|f��dS(s�text.string gives you text. This is for backwards
        compatibility for Navigable*String, but for CData* it lets you
        get the string without the CData wrapper.R�s!'%s' object has no attribute '%s'N(tAttributeErrort	__class__R(RR((s//usr/lib/python2.7/site-packages/bs4/element.pyt__getattr__s
RIcCs$|j||�}|j||jS(N(RPtPREFIXtSUFFIX(RRNRO((s//usr/lib/python2.7/site-packages/bs4/element.pytoutput_readyscCsdS(N(R
(R((s//usr/lib/python2.7/site-packages/bs4/element.pyR#scCstd��dS(Ns)A NavigableString cannot be given a name.(R�(RR((s//usr/lib/python2.7/site-packages/bs4/element.pyR'sN(RRR�R�R
RRRR�R�R�R�RRR	(((s//usr/lib/python2.7/site-packages/bs4/element.pyR-�s				tPreformattedStringcBseZdZdd�ZRS(s�A NavigableString not subject to the normal formatting rules.

    The string will be passed into the formatter (to trigger side effects),
    but the return value will be ignored.
    RIcCs"|j||�|j||jS(sUCData strings are passed into the formatter.
        But the return value is ignored.(RPR�R�(RRN((s//usr/lib/python2.7/site-packages/bs4/element.pyR�2s(RRRR�(((s//usr/lib/python2.7/site-packages/bs4/element.pyR�+stCDatacBseZdZdZRS(u	<![CDATA[u]]>(RRR�R�(((s//usr/lib/python2.7/site-packages/bs4/element.pyR�8stProcessingInstructioncBseZdZdZdZRS(sA SGML processing instruction.u<?u>(RRRR�R�(((s//usr/lib/python2.7/site-packages/bs4/element.pyR�=stXMLProcessingInstructioncBseZdZdZdZRS(sAn XML processing instruction.u<?u?>(RRRR�R�(((s//usr/lib/python2.7/site-packages/bs4/element.pyR�CstCommentcBseZdZdZRS(u<!--u-->(RRR�R�(((s//usr/lib/python2.7/site-packages/bs4/element.pyR�HstDeclarationcBseZdZdZRS(u<?u?>(RRR�R�(((s//usr/lib/python2.7/site-packages/bs4/element.pyR�NstDoctypecBs#eZed��ZdZdZRS(cCsm|p	d}|dk	rF|d|7}|dk	rc|d|7}qcn|dk	rc|d|7}nt|�S(NR�s PUBLIC "%s"s "%s"s SYSTEM "%s"(R
R�(RRtpub_idt	system_idR�((s//usr/lib/python2.7/site-packages/bs4/element.pytfor_name_and_idsUsu
<!DOCTYPE u>
(RRR8R�R�R�(((s//usr/lib/python2.7/site-packages/bs4/element.pyR�SsRoc
Bs�eZdZd8d8d8d8d8d8d8d8d8d�	Zed�Zd�Zed��Z	e	Z
ed��Zejd��Ze
eefd�Zee�Zed��Zd	e
eefd
�ZeZee�Zd�Ze
d�Zd
�Zd8d�Zd8d�Zd�Zd�Zd�Zd�Zd�Zd�Z d�Z!d�Z"d�Z#d�Z$d�Z%d�Z&d�Z'dd�Z(d�Z)d �Z*e+r�e)Z*Z(ne,d8d!d"d#�Z-d$�Z.d8e,d!d%�Z/d8d!d&�Z0d8e,d!d'�Z1d8e,d!d(�Z2e,e
d)d*�Z3d8ie4d8d+�Z5e5Z6d8ie4d8d8d,�Z7e7Z8e7Z9ed-��Z:ed.��Z;d/d0d1gZ<e
Z=e>j?d2�Z@d3�ZAd8d8d4�ZBd5�ZCd6�ZDd7�ZERS(9s=Represents a found HTML tag with its attributes and contents.c
Csz|dkrd|_n|j|_|dkr?td��n||_||_||_|dk	rr|j}
n|	r�g}
n	tj}
|
|_|dkr�i}nN|r�|dk	r�|j	r�|j
|j|�}q�t|�}nt|�}|r|j|_
n	|	|_
||_g|_|j||�t|_|dk	rm|j|�|j|�|_n	t|_dS(sBasic constructor.s%No value provided for new tag's name.N(R
tparser_classR�R^RRRR7R'tcdata_list_attributest$_replace_cdata_list_attribute_valuestdictRQRRR�R\R]RSthiddentset_up_substitutionstcan_be_empty_element(RtparsertbuilderRRRR�R.R�RQR7((s//usr/lib/python2.7/site-packages/bs4/element.pyt__init__isB											
R�c	Cs�t|�d|j|j|j|j|jd|j�}x'dD]}t||t	||��q@Wx$|j
D]}|j|j��qmW|S(s�A copy of a Tag is a new Tag, unconnected to the parse tree.
        Its contents are a copy of the old Tag's contents.
        RQRR�N(RR�(
R�R
RRRRR�RTRRR\RiR�(RtcloneRRg((s//usr/lib/python2.7/site-packages/bs4/element.pyR��s
cCst|j�dko|jS(s7Is this tag an empty-element tag? (aka a self-closing tag)

        A tag that has contents is never an empty-element tag.

        A tag that has no contents may or may not be an empty-element
        tag. It depends on the builder used to create the tag. If the
        builder has a designated list of empty-element tags, then only
        a tag whose name shows up in that list is considered an
        empty-element tag.

        If the builder has no designated list of empty-element tags,
        then any tag with no contents is an empty-element tag.
        i(RvR\R(R((s//usr/lib/python2.7/site-packages/bs4/element.pytis_empty_element�scCs@t|j�dkrdS|jd}t|t�r9|S|jS(sqConvenience property to get the single string within this tag.

        :Return: If this tag has a single string child, return value
         is that string. If this tag has no children, or more than one
         child, return value is None. If this tag has one child tag,
         return value is the 'string' attribute of the child tag,
         recursively.
        iiN(RvR\R
R,R-R�(RRg((s//usr/lib/python2.7/site-packages/bs4/element.pyR��s

cCs$|j�|j|j|��dS(N(tclearRiR�(RR�((s//usr/lib/python2.7/site-packages/bs4/element.pyR��s
ccs�x�|jD]x}|dkr,t|t�s
|dk	rPt|�|krPq
n|r}|j�}t|�dkr}q
q}n|Vq
WdS(s�Yield all strings of certain classes, possibly stripping them.

        By default, yields only NavigableString and CData objects. So
        no comments, processing instructions, etc.
        iN(tdescendantsR
R,R-R�tstripRv(RR	ttypest
descendant((s//usr/lib/python2.7/site-packages/bs4/element.pyt_all_strings�s	ccs#x|jt�D]}|VqWdS(N(RR�(RR�((s//usr/lib/python2.7/site-packages/bs4/element.pytstripped_strings�sucCs/|jg|j|d|�D]}|^q�S(sP
        Get all child strings, concatenated using the given separator.
        R
(R�R(Rt	separatorR	R
RM((s//usr/lib/python2.7/site-packages/bs4/element.pytget_text�scCsL|j�|}x5|dk	rG|j}|jj�g|_|}qWdS(s/Recursively destroys the contents of this tree.N(R`R
RYt__dict__RR\(RR�R�((s//usr/lib/python2.7/site-packages/bs4/element.pyt	decompose�s
	
	cCsg|rDxZ|jD],}t|t�r3|j�q|j�qWnx|jD]}|j�qOWdS(sP
        Extract all children. If decompose is True, decompose instead.
        N(R\R,RoRR`(RRR�((s//usr/lib/python2.7/site-packages/bs4/element.pyRs
cCs@x-t|j�D]\}}||kr|SqWtd��dS(s�
        Find the index of a child by identity, not value. Avoids issues with
        tag.contents.index(element) getting the index of equal elements.
        sTag.index: element not in tagN(t	enumerateR\R^(RR�R�Rg((s//usr/lib/python2.7/site-packages/bs4/element.pyR_scCs|jj||�S(s�Returns the value of the 'key' attribute for the tag, or
        the value given for 'default' if it doesn't have that
        attribute.(R�RV(RtkeyR�((s//usr/lib/python2.7/site-packages/bs4/element.pyRVscCs1|j||�}t|t�s-|g}n|S(s-The same as get(), but always returns a list.(RVR,Rt(RRR�R�((s//usr/lib/python2.7/site-packages/bs4/element.pytget_attribute_listscCs
||jkS(N(R�(RR((s//usr/lib/python2.7/site-packages/bs4/element.pyR�&scCst|�j�S(N(tstrt__hash__(R((s//usr/lib/python2.7/site-packages/bs4/element.pyR)scCs|j|S(sqtag[key] returns the value of the 'key' attribute for the tag,
        and throws an exception if it's not there.(R�(RR((s//usr/lib/python2.7/site-packages/bs4/element.pyt__getitem__,scCs
t|j�S(s0Iterating over a tag iterates over its contents.(titerR\(R((s//usr/lib/python2.7/site-packages/bs4/element.pyt__iter__1scCs
t|j�S(s:The length of a tag is the length of its list of contents.(RvR\(R((s//usr/lib/python2.7/site-packages/bs4/element.pyt__len__5scCs
||jkS(N(R\(Rtx((s//usr/lib/python2.7/site-packages/bs4/element.pyt__contains__9scCstS(s-A tag is non-None even if it has no contents.(R�(R((s//usr/lib/python2.7/site-packages/bs4/element.pyt__nonzero__<scCs||j|<dS(sKSetting tag[key] sets the value of the 'key' attribute for the
        tag.N(R�(RRR�((s//usr/lib/python2.7/site-packages/bs4/element.pyt__setitem__@scCs|jj|d�dS(s;Deleting tag[key] deletes all 'key' attributes for the tag.N(R�tpopR
(RR((s//usr/lib/python2.7/site-packages/bs4/element.pyt__delitem__EscOs|j||�S(s�Calling a tag like a function is the same as calling its
        find_all() method. Eg. tag('a') returns a list of all the A tags
        found within this tag.(tfind_all(RR<R=((s//usr/lib/python2.7/site-packages/bs4/element.pyt__call__IscCs�t|�dkrR|jd�rR|d }tjdtd|��|j|�S|jd�r||dkr||j|�Std|j|f��dS(	NiRoi����s�.%(name)sTag is deprecated, use .find("%(name)s") instead. If you really were looking for a tag called %(name)sTag, use .find("%(name)sTag")Rt__R\s!'%s' object has no attribute '%s'(	RvR�twarningstwarnR�tfindR�R�R�(RR�R�((s//usr/lib/python2.7/site-packages/bs4/element.pyR�Os!
	

cCs�||krtSt|d�s|t|d�s|t|d�s||j|jks||j|jks|t|�t|�kr�tSx4t|j�D]#\}}||j|kr�tSq�WtS(sReturns true iff this tag has the same name, the same attributes,
        and the same contents (recursively) as the given tag.RR�R\(R�RwRR�RvRSRR\(RtotherR�tmy_child((s//usr/lib/python2.7/site-packages/bs4/element.pyt__eq__`scCs||kS(sZReturns true iff this tag is not identical to the other tag,
        as defined in __eq__.((RR'((s//usr/lib/python2.7/site-packages/bs4/element.pyt__ne__qssunicode-escapecCs!tr|j�S|j|�SdS(sRenders this tag as a string.N(tPY3KtdecodeR(RR((s//usr/lib/python2.7/site-packages/bs4/element.pyt__repr__vs
cCs
|j�S(N(R,(R((s//usr/lib/python2.7/site-packages/bs4/element.pyt__unicode__�scCstr|j�S|j�SdS(N(R+R,R(R((s//usr/lib/python2.7/site-packages/bs4/element.pyt__str__�s
RItxmlcharrefreplacecCs%|j|||�}|j||�S(N(R,R(RRtindent_levelRNterrorsR�((s//usr/lib/python2.7/site-packages/bs4/element.pyR�scCs|dk	o|j|jkS(s"Should this tag be pretty-printed?N(R
RR7(RR1((s//usr/lib/python2.7/site-packages/bs4/element.pyt_should_pretty_print�scCs<t|t�r/t|�r/|j|�}ng}|jr3x�t|jj��D]�\}}|d
kru|}n�t|t�s�t|t	�r�dj
|�}nKt|t�s�t|�}n-t|t
�r�|d
k	r�|j|�}n|j||�}t|�dtj|�}|j|�qTWnd}	d}
d}|jr^|jd}n|jr�d}	t|t�r�|jp�|	}	q�nd||jf}
|j|�}d}
d}|d
k	r�d|d}n|r�|}
|d}nd
}|j|||�}|jr"|}ng}d}|rJddj
|�}n|d
k	rf|j|�n|jd||j||	f�|r�|jd�n|j|�|r�|r�|d	dkr�|jd�n|r�|
r�|j|
�n|j|
�|d
k	r)|
r)|jr)|jd�ndj
|�}|S(s�Returns a Unicode representation of this tag and its contents.

        :param eventual_encoding: The tag is destined to be
           encoded into this encoding. This method is _not_
           responsible for performing that encoding. This information
           is passed in so that it can be substituted in if the
           document contains a <META> tag that mentions the document's
           encoding.
        R�R�R�Rs</%s%s>is
<%s%s%s%s>s
i����N(R,R9RLRKR�tsortedtitemsR
RtR�R�RJRRRRPRtquoted_attribute_valueRiRRR?RR3tdecode_contentsR�RZ(RR1teventual_encodingRNR�RtvaltdecodedR�tclosetcloseTagRtpretty_printtspacetindent_spacetindent_contentsR\RMtattribute_string((s//usr/lib/python2.7/site-packages/bs4/element.pyR,�sx	"			
			

cCs9|dkr|jtd|�S|j|td|�SdS(NRN(R
R,R�R(RRRN((s//usr/lib/python2.7/site-packages/bs4/element.pytprettify�scCsIt|t�r/t|�r/|j|�}n|dk	}g}x�|D]�}d}t|t�ru|j|�}n.t|t�r�|j|j	|||��n|r�|r�|j
dkr�|j�}n|rH|r|j
dkr|jd|d�n|j|�|r8|j
dkr8|jd�q8qHqHWdj|�S(svRenders the contents of this tag as a Unicode string.

        :param indent_level: Each line of the rendering will be
           indented this many spaces.

        :param eventual_encoding: The tag is destined to be
           encoded into this encoding. This method is _not_
           responsible for performing that encoding. This information
           is passed in so that it can be substituted in if the
           document contains a <META> tag that mentions the document's
           encoding.

        :param formatter: The output formatter responsible for converting
           entities to Unicode characters.
        R*R�is
R�N(
R,R9RLRKR
R-R�RoRiR,RR	R�(RR1R8RNR=RMtcR�((s//usr/lib/python2.7/site-packages/bs4/element.pyR7s(


cCs"|j|||�}|j|�S(scRenders the contents of this tag as a bytestring.

        :param indent_level: Each line of the rendering will be
           indented this many spaces.

        :param eventual_encoding: The bytestring will be in this encoding.

        :param formatter: The output formatter responsible for converting
           entities to Unicode characters.
        (R7R(RR1RRNR\((s//usr/lib/python2.7/site-packages/bs4/element.pytencode_contents+sicCs%|sd}n|jd|d|�S(NR1R(R
RD(RRtprettyPrinttindentLevel((s//usr/lib/python2.7/site-packages/bs4/element.pytrenderContents=s		cKs;d}|j||||d|�}|r7|d}n|S(sLReturn only the first child of this Tag matching the given
        criteria.iiN(R
R!(RRR�t	recursiveR�R=R�R�((s//usr/lib/python2.7/site-packages/bs4/element.pyR&Fs

cKs7|j}|s|j}n|j||||||�S(s�Extracts a list of Tag objects that match the given
        criteria.  You can specify the name of the Tag and any
        attributes you want the Tag to have.

        The value of a key-value pair in the 'attrs' map can be a
        string, a list of strings, a regular expression object, or a
        callable that takes a string and returns whether or not the
        string matches for some custom definition of 'matches'. The
        same is true of the tag name.(RtchildrenR�(RRR�RHR�R�R=R�((s//usr/lib/python2.7/site-packages/bs4/element.pyR!Qs	cCs
t|j�S(N(RR\(R((s//usr/lib/python2.7/site-packages/bs4/element.pyRIesccsTt|j�sdS|j�j}|jd}x||k	rO|V|j}q2WdS(Ni(RvR\RmRY(RtstopNodetcurrent((s//usr/lib/python2.7/site-packages/bs4/element.pyRjs
t>t+R�s
"[^"]*:[^"]*"cCs'|j|dd�}|r#|dSdS(s9Perform a CSS selection operation on the current element.R�iiN(tselectR
(RtselectorR�((s//usr/lib/python2.7/site-packages/bs4/element.pyt
select_oneysc*s�d|krg}g|jd�D]}|j�^q"}t�}t�}x�|D]�}	|	dkrxtd|��n|	|kr�qSn|j|	��j|	d|�}
xC|
D];}t|�}||kr�|j|�|j|�q�q�W|rSt|�|krSPqSqSW|St	j|�}
�g}|
d�j
krXtd|
d��n�jrmd|GHnx�t|
�D]�\}}g}tg�}|
|d�j
kr��jrzd	GHqzqzn�jr�d
|GHnd+�d+�d+}�jj|�}|d+k	r;|j�\�}}}�j|||�}n0d|krw|jdd�\���fd�}|}n�d
|kr�|jd
d�\�}t|jd
����fd�}|}n�d|kr��jj|�r�|jdd�\�}�dkrtd��ntjd|�}g}|d+krM|}d+}n|j�\}}|dkr�yt|�}Wntd��nX|dkr�td��ndtfd��Y} | |�j}qktd��n�|dkr�ny|dkr
d��na|dkr"d��nI|dkr@d�}!|!�n+�jj|�r[|�ntd|���r�|
|d����fd �}"|"}#ni|d+kr�jr��r�d!}$n�}$d"|$GHn�jr��fd#�}%|%}#qd$�}#n|}#d%}&xH|D]@}'�jr@d&|'jt|'j�fGHnx|#|'�D]}t|t�shqMn�r�|j�kr�qMn|d+k	r�y||�}(Wq�tk
r�Pq�Xn|d+ks�|(r(�jr�d'|jt|j�fGHnt|�|krO|j|�|jt|��qOqM�jrMd(|jt|j�fGHqMqMWqW|}qzW|r�t|�|kr�|| }n�jr�d)GHx&|D]})d*|)j|)jfGHq�Wn|S(,s9Perform a CSS selection operation on the current element.t,R�s"Invalid group selection syntax: %sR�i����s-Final combinator "%s" is missing an argument.sRunning CSS selector "%s"is0  Token was consumed by the previous combinator.s Considering token "%s"t#cs|jdd��kS(Ntid(RVR
(R�(ttag_id(s//usr/lib/python2.7/site-packages/bs4/element.pyt
id_matches�st.cs�j|jdg��S(Ntclass(tissubsetRV(t	candidate(tclasses(s//usr/lib/python2.7/site-packages/bs4/element.pyt
classes_match�sRs0A pseudo-class must be prefixed with a tag name.s([a-zA-Z\d-]+)\(([a-zA-Z\d]+)\)snth-of-typesMOnly numeric values are currently supported for the nth-of-type pseudo-class.s2nth-of-type pseudo-class value must be at least 1.tCountercBseZd�Zd�ZRS(cSsd|_||_dS(Ni(R�tdestination(RR]((s//usr/lib/python2.7/site-packages/bs4/element.pyR�s	cSs-|jd7_|j|jkr%tStSdS(Ni(R�R]R�RS(RR�((s//usr/lib/python2.7/site-packages/bs4/element.pytnth_child_of_type�s(RRRR^(((s//usr/lib/python2.7/site-packages/bs4/element.pyR\�s	s?Only the following pseudo-classes are implemented: nth-of-type.R�RLcSs|jS(N(RI(R�((s//usr/lib/python2.7/site-packages/bs4/element.pyR�sR�cSs|jS(N(R�(R�((s//usr/lib/python2.7/site-packages/bs4/element.pyR�sRMcss|jt�VdS(N(R�R�(R�((s//usr/lib/python2.7/site-packages/bs4/element.pytnext_tag_sibling	ss)Unsupported or invalid CSS selector: "%s"c3s��jr-d�|j|jfGHddGHnx@|j���D],}�jrgd|j|jfGHn|Vq@W�jr�ddGHndS(Ns-    Calling select("%s") recursively on %s %sR�i(s,(Recursive select picked up candidate %s %s)(t
_select_debugRR�RN(R�R�(t
next_tokentrecursive_candidate_generatorR(s//usr/lib/python2.7/site-packages/bs4/element.pytrecursive_selects				s[any]s-   Default candidate generator, tag name="%s"c3sNxG|jD]<}t|t�s%q
n�rA|j�krAq
n|Vq
WdS(N(RR,RoR(R�Rg(R�(s//usr/lib/python2.7/site-packages/bs4/element.pytdefault_candidate_generator7scSs|jS(N(R(R�((s//usr/lib/python2.7/site-packages/bs4/element.pyR�@sis(    Running candidate generator on %s %ss     SUCCESS %s %ss     FAILURE %s %ssFinal verdict:s %s %sN( R�R	R5R^taddRNRSRiRvtshlext_selector_combinatorsR`RR
R�R tgroupsR�tquoted_colonRR$tintR;tobjectR^R�RtreprR�R,RoR�(*RROt_candidate_generatorR�tcontextRt	selectorstused_selectorstselected_object_idstpartial_selectort
candidatesRYt	object_idttokenstcurrent_contextR_ttokentnew_contexttnew_context_idstcheckertmR�R�R�RUtklassR[tpseudotpseudo_attributesR�tpseudo_typetpseudo_valueR\R_Rct_use_candidate_generatortcheckRdR�R�R�R�((RZRaRbRRTR�s//usr/lib/python2.7/site-packages/bs4/element.pyRN�s(		



							
			


					
	
	
	&

	
cCs|jS(N(RI(R((s//usr/lib/python2.7/site-packages/bs4/element.pytchildGeneratorkscCs|jS(N(R(R((s//usr/lib/python2.7/site-packages/bs4/element.pytrecursiveChildGeneratornscCstjd|�|j|�S(s�This was kind of misleading because has_key() (attributes)
        was different from __in__ (contents). has_key() is gone in
        Python 3, anyway.s2has_key is deprecated. Use has_attr("%s") instead.(R$R%R�(RR((s//usr/lib/python2.7/site-packages/bs4/element.pythas_keyqs	N(FRRRR
RR
tparserClassR�RRt
isSelfClosingR�R	RSR-R�RtstringsR
RtgetTextR�RRR_RVRR�RRRRRRRR R"R�R)R*R-R.R/R+R�RR3R,RBR7RDRGR�R&t	findChildR!tfindAlltfindChildrenRIRRgR`R$R%RiRPRNR�R�R�(((s//usr/lib/python2.7/site-packages/bs4/element.pyRoes�3		
	
															
	\)		�		R�cBs\eZdZdidd�Zd�Zd�Zdid�ZeZd�Z	dd�Z
RS(sMEncapsulates a number of ways of matching a markup element (tag or
    text).cKs�|j|�|_t|t�s4||d<d}nd|krX|d|d<|d=n|r�|r�|j�}|j|�q�|}ni}x-|j�D]\}}|j|�||<q�W||_|j|�|_	dS(NRWtclass_(
t_normalize_search_valueRR,R�R
tcopytupdateR5R�R�(RRR�R�R=tnormalized_attrsRR�((s//usr/lib/python2.7/site-packages/bs4/element.pyR~s"
	
		cCs�t|t�sEt|�sEt|d�sEt|t�sE|dkrI|St|t�re|jd�St|d�r�g}xc|D][}t|d�r�t|t�r�t|t�r�|j|�q�|j|j	|��q�W|Stt
|��S(NR tutf8R(R,RRLRwtboolR
tbytesR,RiR�R(RR�t	new_valuetv((s//usr/lib/python2.7/site-packages/bs4/element.pyR��s*

cCs(|jr|jSd|j|jfSdS(Ns%s|%s(R�RR�(R((s//usr/lib/python2.7/site-packages/bs4/element.pyR/�s	c
Cs�d}d}t|t�r*|}|}nt|jt�oIt|t�}|js�|s�|rw|j||j�s�|rt|j||j�rt|r�|j||�}n�t}d}x�t|jj	��D]\}}	|s$t
|d�r�|}q$i}x!|D]\}
}|||
<qWn|j|�}|j||	�s�t}Pq�q�W|rt|rh|}qq|}qtn|r�|j
r�|j|j|j
�r�d}n|S(NRV(R
R,RoRRt_matchesR�RtR�R5RwRVRSR�R�(
Rtmarkup_nametmarkup_attrsR�tmarkuptcall_function_with_tag_dataR tmarkup_attr_mapRt
match_againsttkR�t
attr_value((s//usr/lib/python2.7/site-packages/bs4/element.pyt
search_tag�sB	
"		(	cCsd}t|d�rgt|ttf�rgx�|D].}t|t�r2|j|�r2|}Pq2q2Wn�t|t�r�|js�|js�|j	r
|j
|�}q
nft|t�s�t|t�r�|jr
|j	r
|j||j�r
|}q
ntd|j
��|S(NRs&I don't know how to match against a %s(R
RwR,RoRJR-RR�RR�R�R�t	ExceptionR�(RR�R�R�((s//usr/lib/python2.7/site-packages/bs4/element.pyR�s"%
)c	Cst}t|t�s$t|t�rnx$|D]}|j||�r+tSq+W|jdj|�|�rjtStS|tkr�|dk	St|t�r�||�S|}t|t	�r�|j
}n|j|�}|dkr�|St|d�r}t|t
�r}|st�}nxk|D]\}|jr.|}nt|�}||krLqq|j|�|j|||�rtSqWtSnt}|r�t|t�r�||k}n|r�t|d�r�|j|�S|rt|t	�r|jr|j|jd|j
|�S|S(NR�RRR(RSR,RtR�R�R�R�R
RRoRR�RwRJR5RRSReRRR(	RR�R�t
already_triedR�titemtoriginal_markupRR ((s//usr/lib/python2.7/site-packages/bs4/element.pyR�sV



		

	N(RRRR
RR�R/R�t	searchTagRR�(((s//usr/lib/python2.7/site-packages/bs4/element.pyR�zs		'	R�cBs#eZdZdd�Zd�ZRS(sTA ResultSet is just a list that keeps track of the SoupStrainer
    that created it.cCs#tt|�j|�||_dS(N(tsuperR�Rtsource(RR�R�((s//usr/lib/python2.7/site-packages/bs4/element.pyRVscCstd|��dS(Ns�ResultSet object has no attribute '%s'. You're probably treating a list of items like a single item. Did you call find_all() when you meant to call find()?(R�(RR((s//usr/lib/python2.7/site-packages/bs4/element.pyR�Zs((RRRRR�(((s//usr/lib/python2.7/site-packages/bs4/element.pyR�Ss(,t__license__tcollections.abcRtImportErrortetcollectionsR$RftsysR$t
bs4.dammitRR�tversion_infoR+R%t
whitespace_reR
RRRRRR'RkR9R@RBRCRDRERFR-R�R�R�R�R�R�R�RoR�RtR�(((s//usr/lib/python2.7/site-packages/bs4/element.pyt<module>sR	%
��P9
����