项目进度汇报5
2017-08-08 17:05
148 查看
项目汇报——第五部分
趁着我的小爬虫在辛勤工作,先来写一下这几天的工作。首先,怀揣着对数据来源可靠性的极度不放心,我放下了机器学习那边的工作,想着先爬到数据,用用决策树啥啥啥的简单方法试一试数据能不能用……
说实在的,爬网页的时候真是坎坷。
首先,锁定目标网站。在这里我选择了39健康网http://jbk.39.net/(没有打广告)。先来分析一下网页的 sources,由于需要的数据是疾病和症状的对应关系,直接跳到“疾病症状”板块:万能的F12登场
其实当看到这个网页的源码的时候,是有一点点感动的,写的太工整了,为他们的工程师点赞!
分析一下页面,发现要找的东西已经比较规整了:
于是转到elements里面寻找对应的元素。哇的一声又被感动了,
不要太工整!!!
然后很顺利的就找到了疾病和相关症状的网页链接所在地:
每一个<div></div>就是一个标签,然后用正则表达式就能取得关键信息:疾病和对应的相关症状的链接。
再用相应的链接爬取相应的症状,搞定!
现在来看看相应症状是个啥情况
已经很明显的列出来啦哈哈哈哈,看一下Elements:
嗯,看到这里就可以开始愉快的写爬虫了。
我打算使用网页cookie来起到一点抵抗反爬虫的作用。定义一个cookieJar,使用这个cookieJar实例来构建一个opener
cookies = cookiejar.CookieJar() opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cookies))接着构造一个request,使用刚刚的opener请求访问,返回结果使用通常的utf-8解码,保存为str之后,使用正则表达式:
request = urllib.request.Request(url = Url)
patternForPageF = re.compile(r'病因.*?href="(.*?)/">相关症状.*?class="jzzn-link">查看(.*?)就诊指南>>',re.S)
然后把结果写入文本试试
findResult = re.findall(patternForPageF,hhhh) ItemsForDisease.append(findResult) for it in findResult: f.write(it[1]+'\n') f.write(it[0]+'\n')哇!首战失利!直接no response!
抱着侥幸的心理,试着在request里添加一个header?
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"}
request = urllib.request.Request(url = Url,headers = headers)嗯嗯嗯,搞定!访问成功。
然而,爬虫并没有解析出结果,而是报了错。说啥啥啥无法解析
什么!通用的utf-8不能用了?
算了,换成gbk试试,毕竟中国的网页,唉。
搞定!解码成功并且正确打印了疾病和相关症状的链接
再用opener打开症状链接,正则表达式变为
pattern = re.compile(r'<a title="(.*?)" href="http://jbk',re.S)
结果上面这样。
哇哇哇,那还等什么!赶紧写个loop循环起来再说,一共打算爬1500份页面,每隔5秒爬一页(防止访问过于频繁)
然后我就去睡觉了
起来的时候,爬虫停在了一百零一页,报错了。
再一看……WTF,gbk解码也报错了?报错也就算了,由于没有捕获异常,之前爬的都没有保存下来……瞬间心累
于是,代码变成了这样:
try:这下好了吧???
hhhh = str(result.read().decode('gbk','replace'))
except UnicodeDecodeError as e:
print(e.reason)
print('UnicodeDecodeError')
else:
patternForPageF = re.compile(r'病因.*?href="(.*?)/">相关症状.*?class="jzzn-link">查看(.*?)就诊指南>>',re.S)
findResult = re.findall(patternForPageF,hhhh) ItemsForDisease.append(findResult) for it in findResult: f.write(it[1]+'\n') f.write(it[0]+'\n')
还是不行,到了两百多页的时候,出现了request超时的错误……
唉,没办法,设置一下timeout,再捕获异常
try: result = opener.open(request,timeout=100000) print('打开成功,尝试解码') except error.HTTPError as e: print(e.reason) except error.URLError as e: print(e.reason) else: try:..............然后,我的小爬虫现在还在爬着……期间已经很多次抛出并处理了异常,暗暗庆幸。
除了爬到了数据,我多多少少还是看了一些ML的
比如看了决策树和贝叶斯分类
码的代码就不贴了
下一步尝试用爬到的数据,简单的试一试能不能用。
/* created by ColonyAlbert 17.8.8
*WORK HARD IN SILENCE
*LET SUCCESS BE YOUR NOISE
*/
相关文章推荐
- 项目进度汇报1
- 项目进度汇报4
- 项目进度汇报3
- 项目进度,你汇报清楚了么? 推荐
- 项目进度汇报2
- 第7章-进度可控制-信息系统项目管理师辅导教程(下)
- 基础篇 第四节 项目进度计划编辑 之 任务关联性设定
- Magical NoteNet项目进度
- 测试项目进度跟控——测试负责人的核心 推荐
- 影响项目进度的软因素分析
- 财务一体化项目,进度与计划7
- 财务一体化项目,进度与计划8
- 结队-四则运算-项目进度
- 项目进度调整
- 团队项目冲刺第二天进度和问题
- 使用org.apache.commons.net.ftp包开发FTP客户端,实现进度汇报,实现断点续传,中文支持
- 微软专家当评审——我们的项目汇报小结
- 财务一体化项目,进度与计划24
- 音乐播放器项目技术之一音乐播放进度及音量的控制
- stm32上的Lava虚拟机开发进度汇报(4)