根据文章标题关键字爬取顶会CVPR文章并下载文章

    科技2022-07-11  103

    我使用的是Python3.5,因为能力有限只能根据一个关键词查找。 如果有大神知道怎么可以根据多个关键词同时出现在标题中精确查找,请告知谢谢。或者其他改进地方的,希望大家一起讨论学习。

    # -*- coding: utf-8 -*- import os import re import urllib import urllib.request import requests #get web context def get_context(url): """ params: url: link return: web_context """ web_context = requests.get(url) return web_context.text url = r'https://openaccess.thecvf.com/CVPR2020?day=2020-06-16' ''' 试过用https://openaccess.thecvf.com/CVPR2020 但是爬出的数据并找不到文章,所以只能精确找到月份。 ''' web_context = get_context(url) #find paper files ''' (?<=href=\"): 寻找开头,匹配此句之后的内容 .+: 匹配多个字符(除了换行符) ?pdf: 匹配零次或一次pdf (?=\">pdf): 以">pdf" 结尾 |: 或 ''' #link pattern: href="***_CVPR_2016_paper.pdf">pdf link_list = re.findall(r"(?<=href=\").+?pdf(?=\">pdf)|(?<=href=\').+?pdf(?=\">pdf)",web_context) #name pattern: <a href="***_CVPR_2016_paper.html">***</a> name_list = re.findall(r"(?<=2020_paper.html\">).+(?=</a>)",web_context) name_list1=name_list ''' 根据自己需要的关键字修改keyword里面的内容 ''' keyword=['Autonomous','Driving'] #找出文章标题中单词与keyword中的低单词相同文章在name_list 的位置 n=-1 cnt=[] for name in name_list1: name1=name.split(sep=' ') n+=1 for word in name1: if word in keyword: cnt.append(n) #download #create local filefolder local_dir = 'E:\\CVPR19\\' if not os.path.exists(local_dir): os.makedirs(local_dir) ############################## cnt1 = 0 while cnt1 < len(cnt): file_name = name_list[cnt[cnt1]] download_url = link_list[cnt[cnt1]] #为了可以保存为文件名,将标点符号和空格替换为'_' file_name = re.sub('[:\?/]+',"_",file_name).replace(' ','_') file_path = local_dir + file_name + '.pdf' #download print ('['+str(cnt1)+'/'+str(len(cnt))+'] Downloading' + file_path) try: urllib.request.urlretrieve("http://openaccess.thecvf.com/" + download_url, file_path) print('正在下载!') except: print ('download Fail: ' + file_path) cnt1 += 1 print('Finished')

    结果大致下面:我查的是关键词 keyword=[‘Autonomous’,‘Driving’]

    参考:https://blog.csdn.net/a529975125/article/details/79479438?biz_id=102&utm_term=爬取CVPR文章&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-0-79479438&spm=1018.2118.3001.4187

    Processed: 0.021, SQL: 8