Scraping required fields exhausting a full website
This is quite clean and understandable.

I would pinpoint only a couple of things:


to avoid code repetition and to generalize getting search result properties, what if you would collect all the properties (genre, quality, size etc) into a dictionary:

properties = {
    label.text: label.xpath("following-sibling::text()")[0]
    for label in items.xpath(".//div[@class="mdif"]//li/b")
}


As a bonus, you would not need the try/except part at all.
as usual, you may reuse a session to boost your HTTP requests part performance


Some other minor notes:


it looks like that you make an extra request to the page number 0, adjust your range if this is the case
items variable name is probably a bit misleading, at the very least it should be item since you are iterating over search result items one by one
put get_links() call to under the if __name__ == '__main__' to avoid the code being executed if the module is ever imported
I would also return or yield from the get_links and process_docs functions instead of printing things out