之前想研究下怎么抓网页数据.然后就有了下面的练习了.

如有BUG.也纯属正常. 只是练习.请勿投入产品使用.

#!/usr/bin/python
# -*- coding: utf-8 -*-
#Filenaem: tqjinyan.py import os,sys,time,urllib2,re
import cookielib
import multiprocessing
import datetime,time #定义存储完整的数据字典
#keyword: 具体短链接地址,发布时间,标题,平均每天浏览量,更新时间,总浏览量,链接地址
userJinYanAll={} #提取用户总共有多少经验
def tiquNumber(url):
regex = re.compile(r'&pn=(\d{1,10})"')
web=urllib2.urlopen(url).read()
num= regex.findall(web)
if not len(num):
num.append(1)
num=map(int,num)
num.sort()
return num[-1] #拼接每一页的链接,返回链接的列表
def retJinYanYe(url,num):
# print '准备获取分页页面...'
yesNumLianjie=[]
for i in range(0,num+1,7):
yesNumLianjie.append(url+"&pn="+str(i))
return yesNumLianjie #返回分页经验
def retNumTitle(jylist):
numjisu=0
for url in jylist:
numjisu+=1
#定义正则,链接,发布时间,标题
regex_href = re.compile(r'<p class="tit"><a href="(.{1,200})" title="')
regex_time=re.compile('<span class="exp-time">(.{1,12})</span>')
regex_title=re.compile('" title="(.{1,80})" target="_blank">')
#定义字典关键词
regex_keyword=re.compile('e/(.{1,50}).html')
#获取web分页中的数据
web=urllib2.urlopen(url).read()
#获取链接,发布时间,标题
href=regex_href.findall(web)
exp_time=regex_time.findall(web)
title=regex_title.findall(web)
#进行循环添加至列表的字典中
# print url
for i in range(0,len(title)):
#定义一个空列表,用于添加至列表字典中
userlist=[]
keyword = regex_keyword.findall(href[i])
# print keyword
userlist.append(href[i])
userlist.append(exp_time[i])
userlist.append(title[i])
# print keyword
userJinYanAll[keyword[0]]=userlist
# printstdout('\r正在获取第 %i 页的经验信息...' % numjisu) # print userJinYanAll #根据地址,使用cookie浏览具体页面,返回浏览量,更新时间
def retLiuLanNum(keyword,url,i):
loginUrl='http://jingyan.baidu.com'+url
#以cookie来访问具体的网页
# cj = cookielib.CookieJar()
# opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
# urllib2.install_opener(opener)
# resp = urllib2.urlopen(loginUrl)
req=urllib2.Request(loginUrl,data="")
f=urllib2.urlopen(req).read()
regex_liulannum = re.compile(r'<span class="views">(\d{1,10})</span>')
regex_updateTime=re.compile(r'<time>(.{1,20})</time>')
viewsNum=regex_liulannum.findall(f)
updateTime=regex_updateTime.findall(f)
#平均流量
if int(viewsNum[0])!=0:
jianGeDay=pingJunNum(keyword,updateTime[0],viewsNum[0])
pjNum=int(viewsNum[0])/int(jianGeDay)/1.00
if pjNum<1:
userJinYanAll[keyword].append('-')
else:
userJinYanAll[keyword].append(str(pjNum))
# print pjNum
else:
userJinYanAll[keyword].append('-')
# print pingJunNum(keyword,updateTime,viewsNum)
# sys.exit()
# print viewsNum,updateTime
userJinYanAll[keyword].append(updateTime[0])
userJinYanAll[keyword].append(viewsNum[0])
userJinYanAll[keyword].append(loginUrl)
# print userJinYanAll
# sys.exit()
#下面这句.因为格式需要<换成两行,如需测试.自行优化下格式.
print str(i)+"\t\t"+userJinYanAll[keyword][1]+"\t"+userJinYanAll[keyword][5]+
      "\t"+userJinYanAll[keyword][3]+"\t"+userJinYanAll[keyword][2]+"\t"+userJinYanAll[keyword][6] def getcookie():
loginUrl='http://jingyan.baidu.com/article/ed2a5d1f1938f909f7be174f.html'
cj = cookielib.CookieJar()
opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
urllib2.install_opener(opener)
resp=urllib2.urlopen(loginUrl)
f = urllib2.urlopen(url= loginUrl) def menu(url):
try:
#获取用户姝经验分页
# print '提取经验总数量...'
numYe=tiquNumber(url)
#根据分页链接获取每页上面的链接
jylist=retJinYanYe(url,numYe)
# print '总共有:%s页经验.'%len(jylist)
# print '根据分页信息获取具体链接..'
# print jylist
retNumTitle(jylist)
# for t in jylist:
#根据链接生成字典数据
# retNumTitle(t)
# print '共有:%s篇经验.'%len(userJinYanAll)
# print '获取Cookie信息中...'
getcookie()
# print '获取每篇经验具体的经验信息,此时间比较久,请耐心等待...'
# print '----------输出具体的经验列表----------'
# print '序列\t发布时间\t总浏量\t平均每天的浏览量\t\t标题\t\t\t具体链接'
i=0
for k,v in userJinYanAll.items():
i+=1
retLiuLanNum(k,v[0],i)
# print "%s:%s"%(k,v)
# for k,v in userJinYanAll.items():
# print k,v
# print v[4]+"\t"+v[2]+"\t"+v[1]+"\t"+v[3]+"\t"+v[5]
# print '-'*50
# print userJinYanAll
return userJinYanAll
# userjianyanpaixu=sorted(userJinYanAll.iteritems(),key=lambda asd:asd[1],reverse=True)
# for k,v in userjianyanpaixu.items():
# i+=1
# print str(i)+"\t\t"+userjianyanpaixu[1]+"\t"+userjianyanpaixu[5]+"\t"+userjianyanpaixu[3]+
     #    "\t"+userjianyanpaixu[2]+"\t"+userjianyanpaixu[6]
# # print userJinYanAll
except KeyboardInterrupt,e:
return e
# print "QUIT" def printstdout(printname):
sys.stdout.write("\r%s"%printname)
sys.stdout.flush() def pingJunNum(keyword,update,num):
# print keyword,update,num
updatetime=datetime.datetime.strptime(update,'%Y-%m-%d %H:%M')
newde=datetime.datetime.now()
chadate= newde-updatetime
return str(chadate).split(' ')[0] def sys_input():
url_baidu='http://jingyan.baidu.com/user/npublic/expList?un='
raw_str=urllib2.quote(raw_input('请输入用户百度经验ID: '))
url=url_baidu+raw_str
menu(url)
# userjianyanpaixu=sorted(userJinYanAll.iteritems(),key=lambda asd:asd[1],reverse=True)
# print userjianyanpaixu
# for i in userjianyanpaixu:
# print i[1]
def sys_input_wap(baidujyid):
url_baidu='http://jingyan.baidu.com/user/npublic/expList?un='
# raw_str=urllib2.quote(baidujyid)
url=url_baidu+baidujyid
returntest(url)
# return url def returntest(url):
web=urllib2.urlopen(url).read()
return web if __name__=="__main__":
sys_input()

=======================================================

||                  好吧. 代码如上. 或许有BUG.并且没有进行重构.优化.                                 ||
||            已知问题.百度会有相关IP访问频率屏蔽.所以不适合商用.仅测试.                          ||

=======================================================

版权声明:本文为博主原创文章,未经博主允许不得转载。

python提取百度经验<标题,发布时间,平均流量,总流量,具体的链接>的更多相关文章

  1. Python数据抓取(3) —抓取标题、时间及链接

    本次分享,jacky将跟大家分享如何将第一财经文章中的标题.时间以及链接抓取出来 (一)观察元素抓取位置 网页的原始码很复杂,我们必须找到特殊的元素做抽取,怎么找到特殊的元素呢?使用开发者工具检视每篇 ...

  2. 标题右边10px位置紧跟发布时间

    一个ul列表,拥有若干li,内容是新闻标题,标题右边10px位置紧跟发布时间,当标题过长需要控制标题width,需要兼容ie6,不能用max-width h4{font-size:14px;heigh ...

  3. 基于python对B站收藏夹按照视频发布时间进行排序

    基于python对B站收藏夹按照视频发布时间进行排序 前言 在最一开始,我的B站收藏一直是存放在默认收藏夹中,但是随着视频收藏的越来越多,没有分类的视频放在一起,想在众多视频中找到想要的视频非常困难, ...

  4. dede调用文章的栏目,作者,发布时间.以及连接数据库输出一个表

    发布时间: {dede:field.pubdate function="MyDate('Y-m-d H:i',@me)"/}类目:{dede:field.typename/}发布人 ...

  5. 使用 Python 编写脚本并发布

    使用 Python 编写脚本并发布 P1: 脚本 通常在 Linux 服务器上会遇到在命令行中输入命令的操作,而有些操作包含的命令数目较多或者其中的命令包含的参数较多,如果一个一个的敲命令的话就太麻烦 ...

  6. excel批量提取网页标题

    最近时间比较忙,有时候很多网页需要临时保存,以便空闲的时候查看.单纯的保存网页链接会让人很枯燥,所以需要自动批量提取标题. 为了这个小功能去写个小程序有点不划算,所以就利用excel实现了这个功能. ...

  7. 转:python提取浏览器Cookie

    在用浏览器进行网页访问时,会向网页所在的服务器发送http协议的GET或者POST等请求,在请求中除了指定所请求的方法以及URI之外,后面还跟随着一段Request Header.Request He ...

  8. glibc 各版本发布时间以及内核默认glibc版本

    最近有些软件要求glibc 2.14+,centos 6.x自带的版本是2.12的,特查了下glibc 各版本发布时间以及与对应的内核,如下: Complete glibc release histo ...

  9. 2.1 -1.0 Xcode(发布时间、使用、快捷键、插件相关)

    本文并非最终版本,如有更新或更正会第一时间置顶,联系方式详见文末 如果觉得本文内容过长,请前往本人 “简书” 1.0 Xcode 发布时间 版本 iOS 版本 手机 日期 特殊介绍 Xcode 3.1 ...

随机推荐

  1. jsonp封装成promise

    首先将jsonp通过npm 安装引入js文件中,代码如下 import originJsonp from 'jsonp' export default function jsonp(url, data ...

  2. GraphicsTier

    [GraphicsTier] 1.enum GraphicsTier 2.enum ShaderQuality 3.enum BuildTargetGroup 4.EditorGraphicsSett ...

  3. spring读取工程外配置文件

    因为生产和开发测试的环境不同,所以有时候需要把properties文件放在包外方便修改配置. spring配置文件如下: <context:property-placeholder locati ...

  4. 前端基础之css介绍

    CSS介绍 CSS(Cascading Style Sheet,层叠样式表)定义如何显示HTML元素. 当浏览器读到一个样式表,它就会按照这个样式表来对文档进行格式化(渲染). CSS语法 CSS实例 ...

  5. es快照定时备份脚本

    #!/bin/bashdata1=`date "+%Y%m%d"`data2="http://0.0.0.0:9200/_snapshot/my_backup/snaps ...

  6. Flask中路由系统、Flask的参数及app的配置

    @app.route('/', methods=['GET', 'POST']) 1. @app.route()装饰器中的参数 methods:当前URL地址,允许访问的请求方式 @app.route ...

  7. Appium+python自动化1-环境搭建

    一.前言 appium可以说是做app最火的一个自动化框架,它的主要优势是支持android和ios,另外脚本语言也是支持java和Python.小编擅长Python,所以接下来的教程是appium+ ...

  8. httpclient和htpUrlConnection用例

    使用了很久框架,突然不知道,原生访问网络请求方式,回过头去看,还好,对现在流行使用okhttp也有了更深体会. HttpURLConnection介绍: HttpURLConnection是一种多用途 ...

  9. Codeforces Beta Round #52 (Div. 2)

    Codeforces Beta Round #52 (Div. 2) http://codeforces.com/contest/56 A #include<bits/stdc++.h> ...

  10. PHP调用外部程序的方法

    很多情况下需要php调用其他程序如shell命令.shell脚本.可执行程序等等,此时需要使用到诸如exec/system/popen/proc_open等函数,每种函数有各自适合使用的场景以及需要注 ...