伯乐身高爬虫
来源:互联网 发布:英雄连2美军潘兴数据 编辑:程序博客网 时间:2024/04/29 21:00
最近在朋友的博客里看到了一篇文章,是讲伯乐在线这个网站上有一个面向对象栏目。什么是面向对象呢,面向对象是一个专门为IT单身男女服务的征友传播平台,由伯乐在线专门为程序员爱情创立的一个公益+免费活动。简单来说,网站的女用户在这个栏目组发帖子,包括自己的相关信息,以及理想的男友条件,男生们可以付出一定代价获得女用户保存在网站上的个人联系方式,看对眼的话,就去领证:)
然后呢,我这个朋友关注的点不太主流,他不用爬虫爬妹子照片,或者通过黑客攻击拿到妹子的联系方式,反而用python将所有发表的帖子当中对身高的要求给爬了..>
下面是我将他的代码改进:
import requestsimport reimport osimport sysimport timefrom bs4 import BeautifulSouppageNum = 10 # 所有帖子总共10页urlsFile = os.path.join(sys.path[0],'urls.txt')# 保存帖子url的本地路径的字符串,os.path.join()知识提供文件路径拼接功能 如果想要创建文件夹 则使用os.mkdir(path)infoNum = 0 #有效信息的总条数num = 0 #包含敏感信息的总条数# 获取所有帖子的urldef getUrls(): if(os.path.exists(urlsFile)): return getUrlsFromFile()#如果本地存在数据直接从本地读取 urlList = list() url='http://date.jobbole.com/page/1/?sort=latest' while url: html = requests.get(url) pattern = "href=\"(.*?)\">.*?</a><label class=\"hide-on-480 small-domain-url\"></label>" result = re.findall(pattern,html.text) urlList = urlList + result tem=(re.findall('<li id=\"pagination-next-page\"><a href=\"(.*?)\"',html.text)) if len(tem)>0:url=tem[0] else:url=None saveUrls(urlList) #保存到本地 return urlList#本地读取所有帖子的urldef getUrlsFromFile(): urlList = list() f = open(urlsFile,"r") for line in f.readlines(): #全部读取再按行打乱 则每行是带换行符的数据,使用时 strip过滤 urlList.append(line.strip()) f.close() return urlList#将帖子信息存入本地文件中def saveUrls(urlList): f = open(urlsFile,"w") f.write('%s' % '\n'.join(urlList))#查询该帖子下的内容def viewUrl(url): global infoNum result = "" html = requests.get(url) soup = BeautifulSoup(html.text,"lxml") info = soup.find("div",{"class":"p-entry"}) info = str(info) pattern = "对另一半的最低要求是:(.*?)<br/>" r = re.findall(pattern,info) if len(r)>0:#保证不会抛出异常 if (r[0]!=""): infoNum = infoNum+ 1 result = r[0] isAboutH(result)#是否有涉及身高的敏感信息def isAboutH(info): global num print(info) keys=['(\d{3})','(\d\.\d\d)','(\d\.\d)'] f = open("infoH.txt","a") for p in keys: r = re.findall(p,info) if(len(r)): num = num + 1 f.write(str(r[0])+"\n") f.close() print(r[0]) break f.close() print("\n")#读取在文件中的身高数据求平均值def getAvarge(): numList=list() f = open("infoH.txt","r") for line in f.readlines(): line=line.strip() if line!='': #去除小数点 if line.find('.')!=-1: line=(float(line))*100 num = float(line) numList.append(num) result=0.0 for num in numList: result+=num return result/len(numList)urlList = getUrls()num = 0#每次爬去时需将上次爬虫信息清空f = open("infoH.txt","w")f.close()for i in range(0,len(urlList)): print('第'+str(i+1)+'个begin:') viewUrl(urlList[i]) print('进度 %.2f\n' % ((i+1)/len(urlList))) time.sleep(0.1)print(infoNum)print(num)print('平均身高 %.2f' % getAvarge())
这个小玩具呢,实际上很简单,通常我在解析网页信息的时候有两种简单粗暴地选择,
BeautifulSoup解析
正则表达式
由于我也没有通过具体的数值计算了解这两种方式的效率,所以我就顺意优先使用BeautifulSoup,如果一个信息通过一次简单的BS解析无法完成时,在这里我就使用Re正则表达式。
通过爬虫信息可以看出,妹子们的要求实际上没有太高,(当然可能是怕吓跑太多人555~),有150+的有效数据,而明确要求最低身高的大概80名左右,经过计算平均值在172左右,嗯,好吧,就这样。
0 0
- 伯乐身高爬虫
- 伯乐对象年龄爬虫
- 身高
- Python scrapy爬虫爬取伯乐在线全部文章,并写入数据库
- 伯乐在线
- 伯乐在线
- 伯乐在线
- 古代人身高
- 平均身高
- 身高预测
- 女儿身高
- 女儿身高
- 女儿身高
- 奶牛身高
- “伯乐”喜欢什么“马”
- 莫言“世上少伯乐”
- 欲找伯乐
- 技术和伯乐
- 向华为学习奋斗:管理模式的“道”与“术”
- OpenGL ES之glUniform函数
- 【POJ】1363 - Rails(栈)
- 第一次项目二-1c++上机报告
- 阿里云linux服务器分区,格式化,挂载
- 伯乐身高爬虫
- 怎样直接将pdf转化成word
- 1085. Perfect Sequence (25)
- ArcGIS Server 发布 REST 服务
- 排序、检索 2016.2.6
- 伯乐对象年龄爬虫
- Android查询短信数据库
- 欢迎使用CSDN-markdown编辑器
- Fragment 用法总结(二)