A.目标的选定
1.因为后面自己的毕业设计项目关于到了短日记中文情感分析模型的建立和训练,在网上收集训练集的时候找不到合适的日记训练集,找到的都是一些微博评论的数据,训练之后感觉这个微博评论数据集的准确率和适配性不是很好,于是产生了自己去制作一份带有标签的日记文本训练集,所以现在的任务是利用python爬虫爬取日记网站公开的日记内容
2.在网络上面经过一段时间的资料收集,最后确定了网站为拉普达日记(http://www.lapuda.org/)因为这里的日记内容是按照有序的数字顺序存储的,这样有利于爬虫机械化的爬取数据
B.目标的可行性分析
1.对于最新的一篇日记(http://www.lapuda.org/diary/130407/)首先我们先使用postman不携带任何参数去实现能否获得网页,答案是不能,在进过一番的测试之后,发现只要能携带Cookie头文件就能很好的获得网页的源代码
2.在阅读源代码后,锁定文本日记的内容在一个pre标签里面,这里我采用了正则表达式来对HTML代码进行处理得到文本日记正则表达式为
(?<=pre>)([\s\S]?)(?=<),
在这里有一个知识点,首先我使用的是
(?<=pre>)(.?)(?=<)
发现这个换行数据不能获取到,只能获取到一行的文本,在网络上面搜索了资料后发现使用上面的那个正则表达式能够获取到所有的文本信息
3.因为按照顺序来说有些日记是属于隐私日记,源代码里面没有文本日记,所有应该找到一种方法去区分成功这两种日记(公开的日记和隐私的日记),在阅读隐私日记的HTML源代码后,我发现在隐私日记里面比公开的多(登录可查看更多)的文本,那么我们用正则表达式去写登录可查看更多.*,这样我们就能区别出这两种数据了
c.爬虫代码的编写
1.首先定义一个获取文本信息的函数,能够初步得到去除空格和换行的文本
def get_diary(url):
#定义头部信息,Cookie需要自己去看网站里面自己的Cookie
headers =
{
'Cookie':
'Agent':"http://www.lapuda.org/diary/130223/",
"Referer":"http://www.lapuda.org/diary/130223/"
}
#发送请求获得代码
r=requests.get(url, headers=headers,allow_redirects=False)
r.encoding=r.apparent_encoding
print(r)
#重定向返回0
if r.status_code==302:
return 0
test=re.findall(r'登录可查看更多.*',r.text)
#私密日记返回值为0
if len(test)!=0:
return 0
#获取里面的日记信息并初步清除换行和空格
text=(re.findall(r'(?<=pre>)([\s\S]*?)(?=<)',r.text))
text[0]=text[0].replace