ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

python爬取CVPR论文标题、作者、pdf链接并保存到MySQL数据库

2022-05-13 20:31:09  阅读:180  来源: 互联网

标签:pdflink python print 爬取 CVPR href paper date append


访问外网,程序跑的时间会长一点,耐心等待!

全部源代码:

# -*- coding = utf-8 -*-
# @Time : 2022/5/13 9:33
# @Author :王敬博
# @File : spider.py
# @Software: PyCharm
from bs4 import BeautifulSoup  #网页解析
import re    #正则表表达式文字匹配
import parsel as parsel
import urllib.request,urllib.error  #指定url,获取网页数据
import pymysql.cursors  #连接mysql数据库
num = 1;
def main():
    baseurl = "https://openaccess.thecvf.com/CVPR2019?day=2019-06-18"
    (datalist,num) = getData(baseurl)
    print("爬取完毕!")
    #调研分析数据函数
    conn(datalist,num)          #调用保存函数
    print("保存到数据库!")
def askURL(url):
    head = {   #伪装请求头,模拟浏览器访问
       "User-Agent":" Mozilla / 5.0(Linux;Android6.0;Nexus5 Build / MRA58N) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 99.0.4844.51Mobile Safari / 537.36"
    }
    request = urllib.request.Request(url,headers=head)
    html = ""
    try:
        response = urllib.request.urlopen(request)
        html = response.read().decode('utf-8')
        #print(html)
    except urllib.error.URLError as e:
        if hasattr(e,"code"):
            print(e.code)
        if hasattr(e,"reason"):
            print(e.reason)
    return html  #返回爬到所有的html数据




def getData(baseurl):
    html = askURL(baseurl)
    selector = parsel.Selector(html)
    datalist = []
    titlelist = []
    authorlist = []
    abstractlist = []  #摘要列表
    datelist = []      #时间列表
    pdflist = []       #pdf链接列表
    href_list = selector.xpath('//dl/dt/a/@href').getall()
    href_list1 = []
    for href in href_list:
        href1 = 'https://openaccess.thecvf.com/'+href
        href_list1.append(href1)
    num = len(href_list1)
    for href in href_list1:
        href_data = askURL(href)
        selector_02 = parsel.Selector(href_data)
        paper_title =selector_02.xpath('// *[ @ id = "papertitle"]/text()').get()
        title = paper_title.strip()
        titlelist.append(title)
        paper_author = selector_02.xpath('//*[@id="authors"]/b/i/text()').get()
        authorlist.append(paper_author)
        papaer_abstract = selector_02.xpath('//*[@id="abstract"]/text()').get()
        abstract = papaer_abstract.strip()
        abstractlist.append(abstract)

        paper_date = selector_02.xpath('//*[@id="authors"]').get()
        finddata = re.compile(r'(CVPR)(.*),')
        paper_date = str(re.findall(finddata,paper_date))
        date = paper_date.replace("[('CVPR', '),"," ")
        date = date.replace("')]","")
        date = date.strip()
        datelist.append(date)

        pdflink = selector_02.xpath('//*[@id="content"]/dl/dd/a[1]').get()
        findpdflink = re.compile(r'<a href="../../(.*?)">pdf</a>')
        pdflink = str(re.findall(findpdflink, pdflink))
        pdflink = pdflink.replace("['", "")
        pdflink = pdflink.replace("']", "")
        pdflink = "https://openaccess.thecvf.com/" + pdflink
        pdflist.append(pdflink)

    for i in range(0,len(href_list1)):
        print(f"--------------正在爬取第{i}条--------------")
        data = []
        data.append(titlelist[i])
        data.append(authorlist[i])
        data.append(abstractlist[i])
        data.append(pdflist[i])
        data.append(datelist[i])
        datalist.append(data)

    return datalist,num


def conn(datalist,num):           #改成自己的数据库信息即可
    conn = pymysql.connect(host='localhost',user='root',password='1767737316.',database='paperdata',cursorclass=pymysql.cursors.DictCursor)
    cursor = conn.cursor()

    for i in range(0,num):
        print(f"--------------正在保存第{i+1}条--------------")
        list = datalist[i]
        data1 = tuple(list)
        #print(data1)
        sql = 'insert into paper(title,author,abstract,pdflink,date1) values(%s,%s,%s,%s,%s)' #五个字符串对应MySQL的列名
        # (2)准备数据  ,此外设置的字符长度一定要大一点。
        # (3)操作
        try:
            cursor.execute(sql, data1)
            conn.commit()
        except Exception as e:
            print('插入数据失败', e)
            conn.rollback()  # 回滚
        # 关闭游标
        # cursor.close()
        # 关闭连接
        # conn.close()

if __name__ == "__main__":
    main()

截图

 

标签:pdflink,python,print,爬取,CVPR,href,paper,date,append
来源: https://www.cnblogs.com/wjingbo/p/16268020.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有