T老板让整理国外的一些专利,包括专利名称、专利号、申请日期、摘要等信息,还需要进行简单分类统计,顺便记录一下操作流程留作后用。
目标链接:
http://www.freepatentsonline.com/result.html?p=1&srch=ezsrch&pn=&apn=&all=&ttl=&abst=internet+of+thing+search&aclm=&spec=&apd=&apdto=&isd=&isdto=&prir=&ccl=&icl=&in=&icn=&is=&ic=&an=&acn=&as=&ac=&ref=&fref=&oref=&parn=&pex=&asex=&agt=&uspat=on&usapp=on&date_range=all&stemming=on&sort=relevance&search=Search和
http://www.freepatentsonline.com/result.html?p=1&srch=ezsrch&pn=&apn=&all=&ttl=&abst=RFID+search&aclm=&spec=&apd=&apdto=&isd=&isdto=&prir=&ccl=&icl=&in=&icn=&is=&ic=&an=&acn=&as=&ac=&ref=&fref=&oref=&parn=&pex=&asex=&agt=&uspat=on&usapp=on&date_range=all&stemming=on&sort=relevance&search=Search
写个python 爬虫来搞定吧(翻页就不先处理了,怎么高效怎么来了)
# coding=utf-8 import urllib2 from bs4 import BeautifulSoup # 2013年12月5日专利爬取总结 if __name__ == '__main__': # 第一类 # url = 'http://www.freepatentsonline.com/result.html?p=1&srch=ezsrch&pn=&apn=&all=&ttl=&abst=internet+of+thing+search&aclm=&spec=&apd=&apdto=&isd=&isdto=&prir=&ccl=&icl=&in=&icn=&is=&ic=&an=&acn=&as=&ac=&ref=&fref=&oref=&parn=&pex=&asex=&agt=&uspat=on&usapp=on&date_range=all&stemming=on&sort=relevance&search=Search' # 第二类第1页 # url = 'http://www.freepatentsonline.com/result.html?p=1&srch=ezsrch&pn=&apn=&all=&ttl=&abst=RFID+search&aclm=&spec=&apd=&apdto=&isd=&isdto=&prir=&ccl=&icl=&in=&icn=&is=&ic=&an=&acn=&as=&ac=&ref=&fref=&oref=&parn=&pex=&asex=&agt=&uspat=on&usapp=on&date_range=all&stemming=on&sort=relevance&search=Search' # 第二类第2页 # url = 'http://www.freepatentsonline.com/result.html?p=2&srch=ezsrch&abst=RFID+search&uspat=on&usapp=on&date_range=all&stemming=on&sort=relevance' # 第二类第3页 url = 'http://www.freepatentsonline.com/result.html?p=3&srch=ezsrch&abst=RFID+search&uspat=on&usapp=on&date_range=all&stemming=on&sort=relevance' webdata = urllib2.urlopen(url).read() soup = BeautifulSoup(webdata) # 标签属性匹配 trs = soup.find("table", { "class" : "listing_table" }).findAll('tr') for tr in trs: label = tr.contents[1].find('label') if label is not None: # strip()去前后空格 sequenceNum = label.text.split("\n")[1].strip() patentNum = tr.contents[3].text.strip() patentName = tr.contents[5].find('a').text.strip() # 构造目标url tzurl = tr.contents[5].find('a')['href'] targeturl = "http://www.freepatentsonline.com" + tzurl # print targeturl targetWeb = urllib2.urlopen(targeturl).read() targetSoup = BeautifulSoup(targetWeb) # 标签属性匹配 dispdocs = targetSoup.findAll("div", { "class" : "disp_doc2" }) abstract = dispdocs[3].find("div", { "class" : "disp_elm_text" }).text.strip() fillDate = dispdocs[8].find("div", { "class" : "disp_elm_text" }).text.strip() # 输出 print "序号:", sequenceNum print '专利名称 :', patentName print "专利号:", patentNum print "摘要:", abstract print "申请日期:", fillDate print '.........copyright by lyd..........' # 写入文件 fileHandle = open ('d:/lydresult.csv', 'a') fileHandle.write('"' + sequenceNum + '"' + ',' + '"' + patentName + '"' + ',' + '"' + patentNum + '"' + ',' + '"' + fillDate + '"' + ',' + '"' + abstract + '"' + '\n') # if ',' in patentName: # print 'aware the ', patentNum # fileHandle.write(patentName + ',' + patentNum + '\n') fileHandle.close()
用程序跑完发现46、67格式有误:
原来每一页格式并不一致,不过还好只有两个有问题,手动获取一下算了。
注意此操作中对逗号的处理:csv文件中逗号处理,加双引号即可。如”搜索引擎,yidong,haohao”。
后续就是使用Excel来处理,包括自动换行、行高、条件格式设置等。
1.自动换行设置,设置单元格格式为自动换行
2.设置行高
3.冻结窗口
4.筛选,删除重复和无关记录
5.条件格式,不同类别添加不同颜色
效果如下:
6.统计,使用函数SUBTOTAL()
如,=SUBTOTAL(3,D2:D19)