DMM 作品查询代码优化建议
以下代码片段展示了 DMM 作品查询代码的优化建议,解决了原代码中存在的潜在问题。/n/npython/nimport re/nimport requests/nfrom bs4 import BeautifulSoup/n/nheaders = {/n 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36',/n 'Accept-Language': 'en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7',/n 'Referer': 'https://www.dmm.co.jp/',/n 'Upgrade-Insecure-Requests': '1',/n 'Accept-Encoding': 'gzip, deflate, br',/n 'Connection': 'keep-alive'/n}/n/ndef format_product_id(product_id):/n if '-' in product_id:/n product_id = product_id.replace('-', '00')/n return product_id/n/ncid_str = input('请输入要查询的cid, 多个CID用空格或逗号分隔:')/ncids = [format_product_id(cid.strip()) for cid in cid_str.replace(',', ' ').split()]/n/nhigh_definition_cids = []/nstandard_definition_cids = []/n/nfor cid in cids:/n search_url = 'https://www.dmm.co.jp/search/=/searchstr={}'.format(cid)/n response = requests.get(search_url, headers=headers)/n soup = BeautifulSoup(response.text, 'html.parser')/n/n link_tags = soup.find_all('a', href=re.compile(r'https://www/.dmm/.co/.jp/digital/videoa/-/detail/=/cid=/w+'))/n/n if link_tags:/n # 找到作品链接,继续获取作品信息/n link = link_tags[0]['href'].split('?')[0]/n product_id_match = re.search(r'cid=([/w/d]+)', link)/n if product_id_match:/n product_id = product_id_match.group(1)/n/n # 从title标签获取标题/n title_tag = soup.find('h1', class_='item')/n if title_tag:/n # 获取标题文本内容/n title = title_tag.text.strip()/n print(f'{cid} {title}')/n high_definition_cids.append(product_id)/n else:/n # 未匹配到作品ID,跳过该cid的查询/n print(f'未匹配到cid:{cid}')/n else:/n # 没有找到作品,跳过该cid的查询/n print(f'未找到cid:{cid}')/n/nhigh_definition_count = len(high_definition_cids)/nstandard_definition_count = len(standard_definition_cids)/n/nif high_definition_count > 0:/n print(f'高清非月({high_definition_count}):{'/n'.join(high_definition_cids)}')/nif standard_definition_count > 0:/n print(f'标清非月({standard_definition_count}):{'/n'.join(standard_definition_cids)}')/n/n/n优化点:/n/n1. 在获取作品标题前,先判断是否找到作品链接 link_tags,避免 title_tag 为 None 导致异常。/n2. 在获取作品ID时,使用 if product_id_match: 判断正则表达式匹配结果,避免 product_id_match.group(1) 出现异常。/n3. 删除了没有使用的 standard_definition_cids 列表,简化代码结构。/n/n建议:/n/n1. 将代码封装成函数,提高代码复用性和可读性。/n2. 使用更强大的解析库如 lxml 来提升解析效率。/n3. 根据实际需求,添加更多筛选条件,例如判断作品类型、发布时间等。/n/n注意:/n/n爬取网站数据需要遵守网站的Robots协议,避免对网站造成过大的负荷。/n/n希望这些优化建议能帮助你更好地提取 DMM 作品信息。/n
原文地址: https://www.cveoy.top/t/topic/nHZZ 著作权归作者所有。请勿转载和采集!