From 8dc9be12cc73eab62500970dd7979f0401b118ff Mon Sep 17 00:00:00 2001 From: jnozsc Date: Mon, 17 Feb 2020 21:50:34 -0800 Subject: [PATCH 1/2] fix javdb issue when it returns multiple results --- javdb.py | 64 +++++++++++++++++++++++++++++++++----------------------- 1 file changed, 38 insertions(+), 26 deletions(-) diff --git a/javdb.py b/javdb.py index 4d713aa..1c6e6b8 100755 --- a/javdb.py +++ b/javdb.py @@ -59,9 +59,12 @@ def getTag(a): result1 = str(html.xpath('//strong[contains(text(),"类别")]/../following-sibling::span/text()')).strip(" ['']") result2 = str(html.xpath('//strong[contains(text(),"类别")]/../following-sibling::span/a/text()')).strip(" ['']") return str(result1 + result2).strip('+').replace(",\\xa0", "").replace("'", "").replace(' ', '').replace(',,', '').lstrip(',') -def getCover_small(a): +def getCover_small(a, index=0): + # same issue mentioned below, + # javdb sometime returns multiple result + # DO NOT just get the firt one, get the one with correct index number html = etree.fromstring(a, etree.HTMLParser()) # //table/tr[1]/td[1]/text() - result = html.xpath("//div[@class='item-image fix-scale-cover']/img/@src")[0] + result = html.xpath("//div[@class='item-image fix-scale-cover']/img/@src")[index] if not 'https' in result: result = 'https:' + result return result @@ -79,30 +82,39 @@ def getOutline(htmlcode): result = str(html.xpath('//*[@id="introduction"]/dd/p[1]/text()')).strip(" ['']") return result def main(number): - number = number.upper() - a = get_html('https://javdb.com/search?q=' + number + '&f=all') - html = etree.fromstring(a, etree.HTMLParser()) # //table/tr[1]/td[1]/text() - result1 = html.xpath('//*[@id="videos"]/div/div/a/@href')[0] - b = get_html('https://javdb.com' + result1) - dic = { - 'actor': getActor(b), - 'title': getTitle(b), - 'studio': getStudio(b), - 'outline': getOutline(b), - 'runtime': getRuntime(b), - 'director': getDirector(b), - 'release': getRelease(b), - 'number': getNum(b), - 'cover': getCover(b), - 'cover_small': getCover_small(a), - 'imagecut': 3, - 'tag': getTag(b), - 'label': getLabel(b), - 'year': getYear(getRelease(b)), # str(re.search('\d{4}',getRelease(a)).group()), - 'actor_photo': getActorPhoto(getActor(b)), - 'website': 'https://javdb.com' + result1, - 'source': 'javdb.py', - } + try: + number = number.upper() + query_result = get_html('https://javdb.com/search?q=' + number + '&f=all') + html = etree.fromstring(query_result, etree.HTMLParser()) # //table/tr[1]/td[1]/text() + # javdb sometime returns multiple result, + # and the first elememt maybe not the one we are looking for + # iterate all candidates and find the match one + urls = html.xpath('//*[@id="videos"]/div/div/a/@href') + ids =html.xpath('//*[@id="videos"]/div/div/a/div[contains(@class, "uid")]/text()') + correct_url = urls[ids.index(number)] + detail_page = get_html('https://javdb.com' + correct_url) + dic = { + 'actor': getActor(detail_page), + 'title': getTitle(detail_page), + 'studio': getStudio(detail_page), + 'outline': getOutline(detail_page), + 'runtime': getRuntime(detail_page), + 'director': getDirector(detail_page), + 'release': getRelease(detail_page), + 'number': getNum(detail_page), + 'cover': getCover(detail_page), + 'cover_small': getCover_small(query_result, index=ids.index(number)), + 'imagecut': 3, + 'tag': getTag(detail_page), + 'label': getLabel(detail_page), + 'year': getYear(getRelease(detail_page)), # str(re.search('\d{4}',getRelease(a)).group()), + 'actor_photo': getActorPhoto(getActor(detail_page)), + 'website': 'https://javdb.com' + correct_url, + 'source': 'javdb.py', + } + except Exception as e: + # print(e) + dic = {"title": ""} js = json.dumps(dic, ensure_ascii=False, sort_keys=True, indent=4, separators=(',', ':'), ) # .encode('UTF-8') return js From 06de0232a1895cc4278b9b9837fa9c8a7adbb540 Mon Sep 17 00:00:00 2001 From: jnozsc Date: Mon, 17 Feb 2020 21:51:09 -0800 Subject: [PATCH 2/2] typo --- javdb.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/javdb.py b/javdb.py index 1c6e6b8..727c992 100755 --- a/javdb.py +++ b/javdb.py @@ -61,7 +61,7 @@ def getTag(a): return str(result1 + result2).strip('+').replace(",\\xa0", "").replace("'", "").replace(' ', '').replace(',,', '').lstrip(',') def getCover_small(a, index=0): # same issue mentioned below, - # javdb sometime returns multiple result + # javdb sometime returns multiple results # DO NOT just get the firt one, get the one with correct index number html = etree.fromstring(a, etree.HTMLParser()) # //table/tr[1]/td[1]/text() result = html.xpath("//div[@class='item-image fix-scale-cover']/img/@src")[index] @@ -86,7 +86,7 @@ def main(number): number = number.upper() query_result = get_html('https://javdb.com/search?q=' + number + '&f=all') html = etree.fromstring(query_result, etree.HTMLParser()) # //table/tr[1]/td[1]/text() - # javdb sometime returns multiple result, + # javdb sometime returns multiple results, # and the first elememt maybe not the one we are looking for # iterate all candidates and find the match one urls = html.xpath('//*[@id="videos"]/div/div/a/@href')