From 16a7a1023332d2c2a211b82746725f0e826efa59 Mon Sep 17 00:00:00 2001 From: c-my Date: Wed, 30 Jun 2021 11:29:16 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=E5=AE=9E=E4=BD=93?= =?UTF-8?q?=E5=90=8D=E7=A7=B0=E6=9F=A5=E8=AF=A2=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.py | 10 ++++++---- spider/baidu_spider.py | 30 +++++++++++++++++++++++++++++- 2 files changed, 35 insertions(+), 5 deletions(-) diff --git a/main.py b/main.py index f151549..dd9a880 100644 --- a/main.py +++ b/main.py @@ -195,10 +195,12 @@ if __name__ == '__main__': config = configparser.ConfigParser() config.read("config.ini") # get_web_list(config, military_list_of_lists_url_list_jp, "ja", "data/ja_wiki_urls.txt") - get_web_content_json(config, 'zh', "data/baidu_baike_urls_extra.txt", - "data/baidu_baike_data_with_summary_extra.txt", - is_from_file=False) - # s = BaiduSpider(config) + # get_web_content_json(config, 'zh', "data/baidu_baike_urls_extra.txt", + # "data/baidu_baike_data_with_summary_extra.txt", + # is_from_file=False) + s = BaiduSpider(config) + entity_name = s.check_entity_name('mq-9') + print(entity_name) # r = s.get_extra_links("https://baike.baidu.com/item/%E6%AD%BC-20") # print(r) # get_extra_links(config, "data/baidu_baike_urls.txt", "data/baidu_baike_urls_extra.txt") diff --git a/spider/baidu_spider.py b/spider/baidu_spider.py index 5d3baaa..f5f376f 100644 --- a/spider/baidu_spider.py +++ b/spider/baidu_spider.py @@ -15,6 +15,34 @@ class BaiduSpider: } return + def check_entity_name(self, key_word) -> Union[str, dict, None]: + """ + 查询key_word在百科词条中的名称 + :param key_word: 待查询的keyword + :return: 词条不存在则返回None, + 词条存在多个释义是返回词典,key为词条名,value为str类型的数组 + 词条不存在歧义时返回百科中的名称 + """ + url = self.baidu_item_base_url + key_word + r = requests.get(url, headers=self.headers, allow_redirects=False) + if r.status_code == 200: # 消歧义页面 + body = r.text + soup = BeautifulSoup(body, features="lxml") + title = self.get_title(soup) + if title is not None: + return title + list_items = soup.findAll('li', {'class': 'list-dot list-dot-paddingleft'}) + title_list = [item.text for item in list_items] + return {key_word: title_list} + location = r.headers['Location'] + if 'error.html' in location: + return None + else: + body = self.get_web_body_text(url) + soup = BeautifulSoup(body, features="lxml") + title = self.get_title(soup) + return title + def get_web_content_by_keyword(self, key, is_from_file=False) -> dict: """ 根据词条名称,返回属性信息 @@ -101,7 +129,7 @@ class BaiduSpider: r[title] = info return r - def get_title(self, soup: BeautifulSoup): + def get_title(self, soup: BeautifulSoup) -> Union[str, None]: """ 获取网页的title,即百科的词条名称 :rtype: object