T老板让整理国外的一些专利,包括专利名称、专利号、申请日期、摘要等信息,还需要进行简单分类统计,顺便记录一下操作流程留作后用。
目标链接:
写个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)