Python爬取计算机领域文献并输出为csv表格

面试的导师是做图像处理的,面试后让我做一个检索近几年图像去雾顶会的程序,并输出成表格,于是我找了https://dblp.uni-trier.de/和http://openaccess.thecvf.com/两个网站进行爬取。

import requests
import re
import csv
from requests.exceptions import RequestException

huiyi = ['CVPR', 'ECCV', 'ICIP', 'ICCV', 'ECCV']  #输入想要搜索的期刊或会议名称
keyword = 'dehazing'                              #搜索关键词
year = 2014                                       #设置检索年份起点

#获取一个网页的所有信息
def Get_html(url):
    try:
        kv = {'User-Agent': 'Mozilla/5.0'}  #设置请求头反爬
        response = requests.get(url=url, headers=kv, timeout=10)
        response.encoding = 'utf-8'
        if response.status_code == 200:     #如果连接正常就返回响应
            return response
        else:                               #否则打印反常状态码
            print('response.status_code =={}'.format(response.status_code))
            return None
    except RequestException:                #其他错误
        return None


#获取每个文章对应的url链接
def Get_urllist(huiyi, keyword):
    huiyi = huiyi
    keyword = keyword
    list = []
    num = []
    for i in range(len(huiyi)):    #遍历每个会议,获取每个会议检索到的文章数
        url = 'https://dblp.uni-trier.de/search?q=' + keyword + '%20venue%3A' + huiyi[i] + '%3A'
        r = Get_html(url)
        num1 = re.findall('data-matches="(.*?)">
, r.text) num.append(num1[0]) for i in range(len(huiyi)): #遍历每个会议,获取每个会议每个文章的xml页面链接 url = 'https://dblp.uni-trier.de/search/publ/inc?q='+keyword+'%20venue%3A'+huiyi[i]+'%3A&h='+num[i]+'&f=0&s=ydvspc' #构建请求url r = Get_html(url) reurls = re.compile('(https://dblp.uni-trier.de/rec/xml/conf/.*?xml)') #正则匹配文章url urls = re.findall(reurls, r.text) for j in urls: list.append(j) #将每篇文章的xml页面链接存储到list列表中 return list #将openaccess文章主页中的pdf下载链接获取出来 def Get_download_url(oaurl): r = Get_html(oaurl) download_url = re.findall('pdf', r.text) #正则匹配pdf免费下载链接 return 'http://openaccess.thecvf.com/'+download_url[0] #如果xml中没有免费源,去openaccess的官网寻找 def Get_oaurl(title,book,year): r = requests.get('http://openaccess.thecvf.com/'+book+year+'.py') oaurl = re.findall('>' + title[:-1] + '', r.text) return 'http://openaccess.thecvf.com/' + oaurl[0] #获取一条文章的信息 def Get_one_infor(url): r = Get_html(url) title = re.findall('(.*?)', r.text) #获取当前文章标题 authors = re.findall('([^0-9]*?)[0-9]*?', r.text)#获取当前文章作者信息 author = '' for i in range(len(authors)): #将该篇文章的所有作者信息汇总 author = author+'/'+authors[i] books = re.findall('(.*?)', r.text) #获取当前文章期刊名称 years = re.findall('(.*?)', r.text) #获取当前文章年份信息 oaurl = re.findall('(.*?)', r.text) #获取当前文章是否有免费下载途径 eeurl = re.findall('(.*?)', r.text) #获取当前文章付费下载链接 if len(oaurl): # 如果有免费的,用免费 download_url = '[免费]' + Get_download_url(oaurl[0]) else: #如果没有免费的,在oa官网找 if books[0]+years[0] in ['ICCV2019','ICCV2017','ICCV2015','WACV2020']: try: oaurl2 = Get_oaurl(title[0],books[0],years[0]) download_url = '[免费]' + Get_download_url(oaurl2) except: #官网中没有该文章,切付费 download_url = '[付费]' + eeurl[0] else: #官网中没有该会议,切付费 download_url = '[付费]' + eeurl[0] infor = [title[0], author, books[0], years[0], download_url]#当前文章信息汇总 return infor #主程序开始 if __name__ == '__main__': j = 0 url_list = Get_urllist(huiyi, keyword) #获取所有满足条件文章的url #创建csv文件并填写表头 with open(file=keyword + '.csv', mode='a', encoding="gbk", newline='')as f: writer = csv.writer(f) writer.writerow(['标题','作者','会议','年份','下载链接']) f.close() for url in url_list: #遍历每篇文章 infor = Get_one_infor(url) if int(infor[3])>year: #只看year年以后的 j = j + 1 #当前条数 with open(file=keyword+'.csv', mode='a', encoding="gbk", newline='')as f: #信息存储在csv文件中 writer = csv.writer(f) writer.writerow(infor) f.close() print('第{}条数据加载完成'.format(j)) #当前论文信息加载完成 print('全部加载完成')

输出结果

Python爬取计算机领域文献并输出为csv表格_第1张图片

你可能感兴趣的:(Python爬取计算机领域文献并输出为csv表格)