.. _grab_response_search:
Searching the response body
===========================
String search
-------------
With the `doc.text_search` method, you can find out if the response body contains a certain string or not::
>>> g = Grab('
test
')
>>> g.doc.text_search(u'tes')
True
If you prefer to raise an exception if string was not found, then use the `doc.text_assert` method::
>>> g = Grab('test
')
>>> g.doc.text_assert(u'tez')
Traceback (most recent call last):
File "", line 1, in
File "/home/lorien/web/grab/grab/document.py", line 109, in text_assert
raise DataNotFound(u'Substring not found: %s' % anchor)
grab.error.DataNotFound: Substring not found: tez
By default, all text search methods operate with unicode; i.e., you should pass
unicode arguments to these methods and these methods will search inside document's
body converted to unicode. There is an option to work with raw bytes, just pass
`byte=True` to any method::
>>> g = Grab('test
')
>>> g.doc.text_search(b'tez', byte=True)
Regexp Search
-------------
You can search for a regular expression with `doc.rex_search` method that accepts compiled regexp object or just a text of regular expression::
>>> g = Grab('test
')
>>> g.doc.rex_search('<.+?>').group(0)
u''
Method `doc.rex_text` returns you text contents of `.group(1)` of the found match object::
>>> g = Grab('test
')
>>> g.doc.rex_text('<.+?>(.+)<')
u'test'
Method `doc.rex_assert` raises `DataNotFound` exception if no match is found::
>>> g = Grab('test
')
>>> g.doc.rex_assert('\w{10}')
Traceback (most recent call last):
File "", line 1, in
File "/home/lorien/web/grab/grab/document.py", line 189, in rex_assert
self.rex_search(rex, byte=byte)
File "/home/lorien/web/grab/grab/document.py", line 180, in rex_search
raise DataNotFound('Could not find regexp: %s' % regexp)
grab.error.DataNotFound: Could not find regexp: <_sre.SRE_Pattern object at 0x7fa40e97d1f8>