爬取CVPR2019年的论文数据并实现可视化热词云

写在前面

本次课堂练习,老师提出要我们做一个热词云。说实话看到的一瞬间有些懵逼,不知道要怎么做。但查阅了资料后一切明朗起来。也提示我们凡事不要怕,先做就是了。

本文web端代码已上传github:https://github.com/wushenjiang/PaperData

需求

本次任务的需求:爬取CVPR2019年所有论文的题目,并提取题目中的关键字,做成按照热度显示大小的热词云。

成品截图

成品链接:http://39.97.109.245/PaperData/papercloud.jsp

截图:

爬虫模块设计及代码

这里我起先设计了一个爬虫代码,但插入时时失败,出现莫名其妙的错误。且速度极慢。在借鉴了同学的爬虫模块后,速度依然很慢,但好歹可以插入了。也让我提高了我的python水平。代码如下:

# coding=utf-8
import pymysql
import requests
from lxml import etree

class Spider:
    def __init__(self):
        self.url = "http://openaccess.thecvf.com/CVPR2019.py"
        self.header = {
            "user-agent": "Mozilla/5.0 (Linux; Android 8.0; Pixel 2 Build/OPD3.170816.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.116 Mobile Safari/537.36"}
        self.db = pymysql.connect(host=‘localhost‘, port=3306, user=‘root‘, passwd=‘abc456‘, db=‘paperdata‘,
                                  charset=‘utf8‘)
        self.cursor = self.db.cursor()
        self.html_list = []

    def getHtmlList(self):
        response = requests.get(self.url, headers=self.header)
        html_body = etree.HTML(response.text)
        title = html_body.xpath("//dt[@class=‘ptitle‘]/a/@href")
        for item in title:
            self.html_list.append("http://openaccess.thecvf.com/" + item)

    def getContent(self, url):
        try:
            response = requests.get(url, headers=self.header)
            body = etree.HTML(response.text)
            title = body.xpath("//div[@id=‘papertitle‘]/text()")[0]
            abstract = body.xpath("//div[@id=‘abstract‘]/text()")[0]
            down_url = body.xpath("//div[@id=‘content‘]//a/@href")[0].replace("../../", "http://openaccess.thecvf.com/")

            sql = ‘‘‘insert into data values({},"{}","{}","{}")‘‘‘.format(0, title, down_url, str(abstract))
            self.cursor.execute(sql)
            print(title + "插入成功!")
            self.db.commit()
        except Exception as e:
            print(e)

    def run(self):
        self.getHtmlList()
        for url in self.html_list:
            self.getContent(url)

if __name__ == ‘__main__‘:
    spwder = Spider()
    spwder.run()

我们来分析一下这个爬虫模块是如何运行的:首先是新建了一个类,在__init__初始化函数中定义了基本的爬取地址等变量。在getHtmlList方法中提取出了每个论文的详情链接,供在下面循环遍历使用。在

getContent方法中执行了一次插入方法。这里实际上只启动了一个事务。最后在run方法中循环执行插入方法。这个程序的好处在于,对每一个功能做了模块化的封装,提高了运行效率。但python里的插入还是有点慢,加上这是外网,所以爬取过程会耗费一定时间。网页分析就不再赘述,可以自行看代码分析。这里主要使用了xpath进行读取。

web端设计和分析

在搜查了资料后得知,echarts具有词汇云的拓展模块。于是上网搜索了一番后获得了相应的js文件,这东西官网有的下,不再提供下载地址了。对于echarts的用法,近一段时间已经十分熟悉了。这里主要说说service层的处理和点击事件的处理。由于我们从数据库读取的题目中并没有关键字,我们可以在service层对内容进行分析并统计出关键字次数。首先将每个题目都分成一个个单词,然后对单词出现次数做分析,筛选掉无用的介词如for in with等,如下代码:

public class DataService {

	public List<Word> getData() throws SQLException {
		DataDao dao = new DataDao();
		List<Data>  dataList= dao.getData();
		List<Word> wordList = new ArrayList<Word>();
		String [] names = new String[100000];
		for(Data data:dataList) {
			String name = data.getPapername();
			String[] namestemp = name.split(" ");
			names = (String[]) ArrayUtils.addAll(namestemp, names);//把两个字符数组合并。
		}
		HashMap<String, Integer> name_value = new HashMap<>();
		//如果键出现过就+1,没有就记为1
		for(String name:names) {
			name_value.put(name, !name_value.containsKey(name)?1:name_value.get(name)+1);
		}
		//keySet()表示全部键
		for(String name:name_value.keySet()) {
			Word word = new Word();
			if(name!=null&&(name_value.get(name)>1)&&(name.length()>4)) {
				word.setName(name);
				word.setValue(name_value.get(name));
				wordList.add(word);
			}

		}
		return wordList;
	}

至于点击事件,首先在前台输入以下代码:

		chart.on(‘click‘, function(params) {
			var url = "clickFunction?name=" + params.name;
			window.location.href = url;

然后就编写servlet等一系列层进行标题的模糊查询,返回集合后在前台读取即可。常规操作了,不再赘述。

总结

本次课堂作业的难度主要体现在爬取。一是外网,二是数据量庞大。加上python插入速度很慢,只能不断优化代码。也提醒我任何关于数据库的操作一定要捕获异常,以免程序会莫名其妙的中断。

原文地址:https://www.cnblogs.com/wushenjiang/p/12706581.html

时间: 2024-10-04 23:25:40

爬取CVPR2019年的论文数据并实现可视化热词云的相关文章

python 爬取天猫美的评论数据

笔者最近迷上了数据挖掘和机器学习,要做数据分析首先得有数据才行.对于我等平民来说,最廉价的获取数据的方法,应该是用爬虫在网络上爬取数据了.本文记录一下笔者爬取天猫某商品的全过程,淘宝上面的店铺也是类似的做法,不赘述.主要是分析页面以及用Python实现简单方便的抓取. 笔者使用的工具如下 Python 3--极其方便的编程语言.选择3.x的版本是因为3.x对中文处理更加友好. Pandas--Python的一个附加库,用于数据整理. IE 11--分析页面请求过程(其他类似的流量监控工具亦可).

python爬取ajax动态生成的数据 以抓取淘宝评论为例子

在学习python的时候,一定会遇到网站内容是通过ajax动态请求.异步刷新生成的json数据的情况,并且通过python使用之前爬取静态网页内容的方式是不可以实现的,所以这篇文章将要讲述如果在python中爬取ajax动态生成的数据. 至于读取静态网页内容的方式,有兴趣的可以查看博客内容. 这里我们以爬取淘宝评论为例子讲解一下如何去做到的. 这里主要分为了四步: 一 获取淘宝评论时,ajax请求链接(url) 二 获取该ajax请求返回的json数据 三 使用python解析json数据 四

02. 爬取get请求的页面数据

目录 02. 爬取get请求的页面数据 一.urllib库 二.由易到难的爬虫程序: 02. 爬取get请求的页面数据 一.urllib库 urllib是Python自带的一个用于爬虫的库,其主要作用就是可以通过代码模拟浏览器发送请求.其常被用到的子模块在Python3中的为urllib.request和urllib.parse,在Python2中是urllib和urllib2. 二.由易到难的爬虫程序: 1.爬取百度首页面所有数据值 1 #!/usr/bin/env python 2 # -*

03.爬取get请求的页面数据

urllib是Python自带的一个用于爬虫的库,其主要作用就是可以通过代码模拟浏览器发送请求.其常被用到的子模块在Python3中的为urllib.request和urllib.parse,在Python2中是urllib和urllib2. 二.由易到难的爬虫程序: 1.爬取百度首页面所有数据值 1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 #导包 4 import urllib.request 5 import urllib.parse

python网络爬虫第三弹(&lt;爬取get请求的页面数据&gt;)

一.urllib库 urllib是python自带的一个用于爬虫的库,其主要作用就是通过代码模拟浏览器发送请求,其常被用到的子模块在 python3中的为urllib.request 和 urllib.parse,在python2中的是 urllib 和 urllib2 二.由易到难首页面所有的数据值 1.爬取百度首页所有的数据值 import urllib.request import urllib.parse url = 'http://www.baidu.com' # 通过 URLopen

爬虫学习 Python网络爬虫第三弹《爬取get请求的页面数据》

爬虫学习 Python网络爬虫第三弹<爬取get请求的页面数据> 一.urllib库 urllib是Python自带的一个用于爬虫的库,其主要作用就是可以通过代码模拟浏览器发送请求.其常被用到的子模块在Python3中的为urllib.request和urllib.parse,在Python2中是urllib和urllib2. 二.由易到难的爬虫程序: 1.爬取百度首页面所有数据值 1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 #导包 4

cvpr论文爬取——热词云展示(WEB)

效果图: Python源码(将数据导入数据库): 1 import re 2 import requests 3 import pymysql 4 5 def insertCvpr(value): 6 db = pymysql.connect("localhost", "root", "root", "cvprlist", charset='utf8') # 连接数据库 7 8 cursor = db.cursor() 9 s

使用python爬取东方财富网机构调研数据

最近有一个需求,需要爬取东方财富网的机构调研数据.数据所在的网页地址为: 机构调研 网页如下所示: 可见数据共有8464页,此处不能直接使用scrapy爬虫进行爬取,因为点击下一页时,浏览器只是发起了javascript网络访问,然后将服务器返回的数据插入网页,无法通过网址直接获取对应页的的页面数据. 通过chrome的开发者工具,我们可以看到点击下一页按钮背后发起的网页访问: 在点击下一页时,浏览器向地址发起了访问.我们分析一下这个地址的结构: http://data.eastmoney.co

Python爬取天气网历史天气数据

我的第一篇博客,哈哈哈,记录一下我的Python进阶之路! 今天写了一个简单的爬虫. 使用python的requests 和BeautifulSoup模块,Python 2.7.12可在命令行中直接使用pip进行模块安装.爬虫的核心是利用BeautifulSoup的select语句获取需要的信息. pip install requests pip install bs4 以武汉市2017年5~7月的历史为例爬取天气网中武汉市的历史天气数据. 7月对应的网址为http://lishi.tianqi