【软工实践】第四次作业--爬虫结合WordCount

结对同学博客链接
本次作业博客链接
github项目地址

具体分工

我主要负责用python写爬虫部分,他负责C++部分

PSP表格

解题思路

代码的核心思路是利用爬虫,爬取论文网址,之后吧对应信息(标题和摘要)写入文件,然后利用上次的WordCount代码把文件读进去然后进行分析,并且要加上权重分析,之后便是统计词频,然后这次的作业还新加了一个功能叫做词项统计,在不断询问大佬之后,大佬说用队列容器,把检测到的合法单词压入队尾,如果单词不合法就清空,确认词项之后再输出队列。

部分代码展示

代码组织与内部实现设计


爬虫部分

爬虫爬取论文地址

#定义一个函数,用来爬取网页内容
def Web(www):
    try:
        w = requests.get(www)
        w.raise_for_status()
        w.encoding = w.apparent_encoding
    except:
        print("fail!!!")
    temp = w.text
    wz = BeautifulSoup(temp,"html.parser")
    return wz

www = "http://openaccess.thecvf.com/CVPR2018.py"
wz = getWeb(www)

简单处理一下标签,获取标题和摘要,然后写入文件

#定义一个函数,用来论文页面内容
def info(paperLink):
    www = "http://openaccess.thecvf.com/" + paperLink
    wz = Web(www)
    #标签
    bq=re.compile('</?\w+[>]*>')
    #消除
    title =bq.sub('', str(wz.find('div',id="papertitle"))).strip()
    abstract = bq.sub('',str(wz.find('div',id="abstract"))).strip()
    return title,abstract

C++部分

词组划分部分代码

void Count(string tline, int maxn, int start,int quanzhong)
{
	for (int i = start; i < tline.length(); i++)
	{

		int count = 0;//计数
		int charcounts = 0;//字符数
		int numflag = 0;//判断是否数字
		for (int k = i;; k++)//判断是否是单词
		{
			if (tline[k] >= 'a'&&tline[k] <= 'z'&&numflag == 0)
			{charcounts++;count++;}//小写字母
			else if (tline[k] >= 'A'&&tline[k] <= 'Z'&&numflag == 0)
			{charcounts++;count++;}//大写字母
			else if (tline[k] >= '0'&&tline[k] <= '9')
			{count++;numflag = 1;}//出现数字
			else break;
		}
		if (charcounts >= 4) //记录
		{	char words[100] = { "\0" };
		//存储单词
			for (int k = i; k < i + count; k++)
			{
				words[k - i] = tline[k];
			}
			string s = words;
			b.push_back(s);  
			s = "\0";
			if (b.size() == maxn)//队列以满
			{
				int nowNum = maxn;
				for (it1 = b.begin(); it1 != b.end(); it1++)
				{
					s.append(*it1);
					nowNum=nowNum-1;
					if (nowNum != 0)s.append(" ");
				}
				if(start==7&&quanzhong==1)essay[s]+=10;//记录
				else essay[s]++;
				b.pop_front();
				s = "\0";
			}
			i += count - 1;
		}
		else if (count > 0 && count < 4)
		{
			b.clear();
			i += count - 1;
		}
		else continue;

	}
	if (start == 7)b.clear();//清空
}

性能分析

遇到的困难与解决方法

因为我负责的是爬虫部分,一开始的困难就是虽然学过一点python,但是爬虫没写过,好在爬虫的学习资料网上非常多,我在慕课网上找了一个网课看,之后便照猫画虎写了一个,之后反复修改,比如没有东西爬出来,或者是爬出来的东西都是乱掉的,不懂怎么写进文件等等,询问大佬之后,总算能用了。
收获:写了第一个爬虫

评价队友

我的队友虽然不强,但是比较肯学,而且愿意开口问,中间出现问题基本都是他带着电脑去找大神帮忙解决,我觉得这点很值得我学习,不过在做事情的效率上还是需要改进。

学习进度条

posted @ 2018-10-11 16:52  雷霸天777  阅读(317)  评论(0编辑  收藏  举报