求九年级各类学习资源的百度云,不免勿扰,谢谢

查看: 110871|回复: 57
手把手教你用python抓网页数据
精华主题学分
在线时间 小时
购买链接:
注册一亩三分地论坛,查看更多干货!
才可以下载或查看,没有帐号?
本帖最后由 EroicaCMCS 于
20:29 编辑
越来越火了,网页是数据很大的一个来源。最近很多人问怎么抓网页数据,据我所知,常见的编程语言(C++,java,python)都可以实现抓网页数据,甚至很多统计\计算的语言(R,Matlab)都有可以实现和网站交互的包。本人试过用java,python,R抓网页,感觉语法各有差异,逻辑上是一样的。我准备用python来大概讲讲抓网页是什么概念,具体的内容要自己看或者google别人的博客,这里算是抛砖引玉了。水平有限,出现错误或者有更好的办法,欢迎讨论。
步骤一:熟悉Python的基本语法。
已经熟悉Python的直接跳到步骤二。
Python是门比较容易入门的编程语言,如何上手视编程基础而定。
(1) 如果有一定编程的基础,建议看google's python class,链接
这个是一个为期两天的短期培训课程(当然,是两个全天),大概是七个视频,每个视频之后给编程作业,每个作业一个小时之内可以完成。这是我学习python的第二门课(第一门是codecademy的python,很早之前看的,很多内容都记不得了),当时每天看视频+编程作业一个多小时,六天弄完,效果还不错,用python写基本的程序没有问题。
(2) 如果是没有任何编程基础,建议看coursera上Rice University开的An Introduction to Interactive Programming in Python。这门课我没有跟过,但是看coursetalk的评论反映非常好,地里也有同学评论(),课程链接:。Udacity上的CS101也是不错的选择,地里有相关的讨论帖(),而且这门课就叫做build a search engine,会专门讲一些和网络相关的module。其他学习资源还有code school和codecademy,这些资源也是挺不错的,但是编程量太少,初学者还是系统的跟课、多练练手来打好基础吧。
当然,每个人的偏好不同,我推荐的不一定适合你。可以先看看这个帖子里面其他人是怎么说的,或者上看看课程评论,再决定吧。
. 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴
步骤二:学会如何与网站建立链接,得到网页数据。
写脚本与网站进行交互,要熟悉python和网页相关的几个module(urllib,urllib2,httplib)中的一个,知道一个即可,其他的都类似的。这三个是python提供的和网页交互的基本module,还有其他的一些,比如:mechanize和scrappy,我没有用过,可能有更好的性能,欢迎了解的来补充。基本的网页抓取,前面的三个module足矣。
下面的代码演示如何用urllib2与google scholar进行交互,获得网页信息。
# 导入模块 urllib2
import urllib2
# 随便查询一篇文章,比如On random graph。对每一个查询google
# scholar都有一个url,这个url形成的规则是要自己分析的。
query = 'On+random+graph'. 1point 3acres 璁哄潧
url = '/scholar?hl=en&q=' + query + '&btnG=&as_sdt=1%2C5&as_sdtp='. 鍥磋鎴戜滑@1point 3 acres
# 设置头文件。抓取有些的网页不需要专门设置头文件,但是这里如果不设置的话,. 涓浜-涓夊垎-鍦帮紝鐙鍙戝竷
# google会认为是机器人不允许访问。另外访问有些网站还有设置Cookie,这个会相对复杂一些,
# 这里暂时不提。关于怎么知道头文件该怎么写,一些插件可以看到你用的浏览器和网站交互的
# 头文件(这种工具很多浏览器是自带的),我用的是firefox的firebug插件。
header = {'Host': '',
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; rv:26.0) Gecko/ Firefox/26.0',. 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
'Accept': 'text/html,application/xhtml+xml,application/q=0.9,*/*;q=0.8',
'Accept-Encoding': 'gzip, deflate',
'Connection': 'keep-alive'}
# 建立连接请求,这时google的服务器返回页面信息给con这个变量,con是一个对象
req = urllib2.Request(url, headers = header)
con = urllib2.urlopen( req )
# 对con这个对象调用read()方法,返回的是html页面,也就是有html标签的纯文本
doc = con.read()
# 关闭连接。就像读完文件要关闭文件一样,如果不关闭有时可以、但有时会有问题,
# 所以作为一个守法的好公民,还是关闭连接好了。
con.close()复制代码以上的代码就把在google scholar上查询On Random Graph的结果返回到doc这个变量中了,这个和你打开google scholar搜索On Random Graph,然后将网页右键保存的效果是一样的。-google 1point3acres
步骤三、解析网页
上面的步骤得到了网页的信息,但是包括了html标签,你要把这些标签去掉,然后从html文本中整理出有用的信息,
你需要解析这个网页。
解析网页的方法:
(1) 正则表达式。正则表达式很有用,熟悉它节省很多的时间,有时候清洗数据不用写脚本或者在数据库上查询,直接在notepad++上用正则表达式组合使用就行了。如何学习正则表达式建议看:正则表达式30分钟入门教程,链接:
(2) BeautifulSoup模块。BeautifulSoup是一个很强大的模块,能把html文件解析成一个对象,这个对象是一棵树。我们都知道html文件是树状的,比如 body -& table -& tbody -& tr,对于tbody这个节点,有很多个tr的子节点。BeautifulSoup可以很方便的取到特定的节点,对单个节点也可以取它的sibling node。网上有很多相关的说明,这里不细说,只演示简单的代码:
(3) 上面两种方法结合使用。
# 导入BeautifulSoup模块和re模块,re是python中正则表达式的模块
import BeautifulSoup
import re. 鍥磋鎴戜滑@1point 3 acres
# 生成一个soup对象,doc就是步骤二中提到的
soup = BeautifulSoup.BeautifulSoup(doc)
# 抓取论文标题,作者,简短描述,引用次数,版本数,引用它的文章列表的超链接
# 这里还用了一些正则表达式,不熟悉的先无知它好了。至于'class' : 'gs_rt'中
# 'gs_rt'是怎么来的,这个是分析html文件肉眼看出来的。上面提到的firebug插件
# 让这个变的很简单,只要一点网页,就可以知道对应的html 标签的位置和属性,
# 相当好用。
paper_name = soup.html.body.find('h3', {'class' : 'gs_rt'}).text
paper_name = re.sub(r'\[.*\]', '', paper_name) # eliminate '[]' tags like '[PDF]'
paper_author = soup.html.body.find('div', {'class' : 'gs_a'}).text. 1point 3acres 璁哄潧
paper_desc = soup.html.body.find('div', {'class' : 'gs_rs'}).text
temp_str = soup.html.body.find('div', {'class' : 'gs_fl'}).text
temp_re = re.match(r'[A-Za-z\s]+(\d*)[A-Za-z\s]+(\d*)', temp_str).鐣欏璁哄潧-涓浜-涓夊垎鍦
citeTimes = temp_re.group(1)
versionNum = temp_re.group(2)
if citeTimes == '':
&&citeTimes = '0'
if versionNum == '':
&&versionNum = '0'
citedPaper_href = soup.html.body.find('div', {'class' : 'gs_fl'}).a.attrs[0][1]复制代码
这些都是我在一个分析citation network的项目的代码。顺便一提,我从google scholar上抓取paper的信息以及引用列表的信息,访问了大概1900次左右的时候给google block了,导致这个片区的ip一时无法登陆google scholar。-google 1point3acres
步骤四:存取数据
好不容易抓了数据,现在只是存储在内存中,必须保存起来才能利用。
(1) 最简单的方法之把数据写进txt文件中,Python中可以用如下代码实现:
# 打开文件webdata.txt,生成对象file,这个文件可以是不存在的,参数a表示往里面添加。
# 还有别的参数,比如'r'只能读但不能写入,'w'可以写入但是会删除原来的记录等等
file = open('webdata.txt','a'). 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴
line = paper_name + '#' + paper_author + '#' + paper_desc + '#' + citeTimes + '\n'
# 对象file的write方法将字符串line写入file中
file = file.write(line)
# 再一次的,做个随手关闭文件的好青年
file.close()复制代码这样,就把从网页上抓到并且解析了的数据存储到本地了,是不是很简单?
(2) 当然,你也可以不写入txt文件中,而是直接连接数据库,python中的MySQLdb模块可以实现和MySQL数据库的交互,把数据直接倒到数据库里面,与MySQL数据库建立链接的逻辑和与网站服务器建立链接的逻辑差不多。如果之前有学习过数据库,学习用MySQLdb模块实现和数据库的交互是很简单的;如果没有,则要借助在coursera\ openEdX平台上都有开设的Introduction to Database来系统学习,w3school用来参考或者当成手册。
Python能够链接数据库的前提是数据库是开着的,我用的是 win7 + MySQL5.5,数据库在本地。.鐣欏璁哄潧-涓浜-涓夊垎鍦
%可以用cmd开启数据库,启动命令是:
net start mysql55
%关闭命令是:
net stop mysql55复制代码使用MySQLdb模块代码示例:
# 导入 MySQLdb模块
import MySQLdb
# 和服务器建立链接,host是服务器ip,我的MySQL数据库搭建在本机,默认的是127.0.0.1,. 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴
# 用户、密码、数据库名称对应着照输就行了,默认的端口号是3306,charset是编码方式,
# 默认的是utf8(也有可能是gbk,看安装的版本)。
conn = MySQLdb.connect(host='127.0.0.1', user='root', passwd='yourPassword', db='dbname', port=3306, charset='utf8'). 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴
# 建立cursor.
cur = conn.cursor()
# 通过对象cur的execute()方法执行SQL语句. from: /bbs
cur.execute(&select * from citeRelation where paperName = 'On Random Graph'&)
# fetchall()方法获得查询结果,返回的是一个list,可以直接这样查询:list[i][j],
# i表示查询结果中的第i+1条record,j表示这条记录的第j+1个attribute(别忘了python从0开始计数)
list = cur.fetchall()
# 也可以进行delete,drop,insert,update等操作,比如:
sql = &update studentCourseRecord set fail = 1 where studentID = '%s' and semesterID = '%s' and courseID = '%s'& %(studentID,course[0],course[1]). Waral 鍗氬鏈夋洿澶氭枃绔,
cur.execute(sql)
# 与查询不同的是,执行完delete,insert,update这些语句后必须执行下面的命令才能成功更新数据库
# 一如既往的,用完了之后记得关闭cursor,然后关闭链接.鏈枃鍘熷垱鑷1point3acres璁哄潧
cur.close(). From 1point 3acres bbs
conn.close()复制代码.鏈枃鍘熷垱鑷1point3acres璁哄潧
这样就实现了Python和数据库之间的交互。除了MySQL数据库外,python的PyGreSQL模块可以支持postgreSQL数据库,道理类似的。还有,如果你的网页里面包含了中文,设置编码格式会非常的麻烦,需要服务器、Python、数据库和数据库界面采用相同的编码格式才能不出现乱码,如果真的出现了中文乱码的问题,请相信,你不是一个人!!去google一下吧,成千上万的人碰到过这种问题。
关于编码的问题,附一篇我看到的博文&&:.1point3acres缃
. Waral 鍗氬鏈夋洿澶氭枃绔,
上面介绍了抓取网页数据的方法,抓取数据只是一小步,如何分析数据就是大学问了,欢迎讨论。
上面有什么地方讲不清楚的,欢迎交流。
大规模抓取网站会给网站的服务器带来很大的压力,尽量选择服务器相对轻松的时段(比如凌晨)。网站很多,不要拿一亩三分地来做试验。
Python的time模块的sleep()方法可以让程序暂停一段时间,比如time.sleep(1)让程序运行到这里的时候暂停1秒。适时地暂停可以缓解服务器的压力,也可以保护自己的硬盘,正好码久了睡个觉,或者去趟gym,结果就出来了。
日,更改了几处打字错误;添加了相关课程链接;增加了udacity CS101的介绍;增加了MySQLdb模块的介绍。
日,增加了介绍编码方式的博文链接。
. from: /bbs
. 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴
. 鍥磋鎴戜滑@1point 3 acres
<p id="rate_501" onmouseover="showTip(this)" tip="很有用的信息!&大米 + 1 升
" class="mtn mbn">
<p id="rate_252" onmouseover="showTip(this)" tip="欢迎来介绍你知道的情况&大米 + 25 升
" class="mtn mbn">
<p id="rate_687" onmouseover="showTip(this)" tip="超级玛丽好厉害!&大米 + 150 升
" class="mtn mbn">
<p id="rate_56" onmouseover="showTip(this)" tip="很有用的信息!&大米 + 3 升
" class="mtn mbn">
<p id="rate_95" onmouseover="showTip(this)" tip="很有用的信息!&大米 + 3 升
" class="mtn mbn">
<p id="rate_338" onmouseover="showTip(this)" tip="很有用的信息!&大米 + 3 升
" class="mtn mbn">
<p id="rate_969" onmouseover="showTip(this)" tip="感谢分享!&大米 + 10 升
" class="mtn mbn">
<p id="rate_544" onmouseover="showTip(this)" tip="棒棒哒&大米 + 2 升
" class="mtn mbn">
<p id="rate_02" onmouseover="showTip(this)" tip="犀利!&大米 + 10 升
" class="mtn mbn">
<p id="rate_978" onmouseover="showTip(this)" tip="感谢分享!&大米 + 5 升
" class="mtn mbn">
<p id="rate_871" onmouseover="showTip(this)" tip="很有用的信息!&大米 + 3 升
" class="mtn mbn">
<p id="rate_77" onmouseover="showTip(this)" tip="赞~&大米 + 3 升
" class="mtn mbn">
<p id="rate_98" onmouseover="showTip(this)" tip="高手&大米 + 100 升
" class="mtn mbn">
<p id="rate_78" onmouseover="showTip(this)" tip="好东西,学习了&大米 + 150 升
" class="mtn mbn">
<p id="rate_07" onmouseover="showTip(this)" tip="感谢分享!&大米 + 3 升
" class="mtn mbn">
本帖被以下淘专辑推荐:
& |主题: 42, 订阅: 61
& |主题: 5, 订阅: 0
精华主题学分
农民代表, 积分 5811, 距离下一级还需 4189 积分
在线时间 小时
基本很详细了,抓抓普通的网页已经够用。.鐣欏璁哄潧-涓浜-涓夊垎鍦
打算过段时间也写个抓网页的贴子,到时候问问你哈。
精华主题学分
在线时间 小时
能抓下来直接存到本地数据库么?
精华主题学分
在线时间 小时
再加个API 的和SQL的?
精华主题学分
在线时间 小时
好久没见你了,还以为你休假了呢。. /bbs
细致的介绍,下次仔细看
精华主题学分
在线时间 小时
rsun 发表于
08:07 . 鍥磋鎴戜滑@1point 3 acres
好久没见你了,还以为你休假了呢。. 1point 3acres 璁哄潧
细致的介绍,下次仔细看
确实是回家“休假”了,其实我更情愿呆在学校“工作”. 1point 3acres 璁哄潧
回家过年了就是时间各种零碎不好用
参加个ICM导致公开课落下一堆due。。。.
精华主题学分
在线时间 小时
太谢谢啦!刚好需要从网页上抓数据最近!
精华主题学分
在线时间 小时
i mean access some APIs (make GET and POST requests etc). 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
e.g. scrape your weibo, twitter, douban data through API
between Py and R there's R2py or sth, but frankly I never got them to work seamlessly together. /bbs
for ipynb there's sth that can make R results show up but always with an annoying blank
这个问题如果能解决的话就更好了,感觉ipynb works more intuitively than knitr or rmd for reproducible research
精华主题学分
在线时间 小时
以前class project用过weibo的API
从google scholar抓数据慎重。。。我就被禁过 T_T
精华主题学分
在线时间 小时
做好准备!!!
精华主题学分
在线时间 小时
精华主题学分
在线时间 小时
好贴啊,刚好近期要用,楼主V5
精华主题学分
在线时间 小时
楼主有定时爬网页的经验么。。
如果要每天定时哪个时间跑下程序然后抓的数据放到一个file里。虽然我知道linux命令行,但是如果要定时每小时都跑一次,然后跑3个月,感觉自己笔记本一直开着不太现实呀。。有没有啥软件可以用啥的就是不用自己笔记本跑。。。付费也可以哇。
精华主题学分
在线时间 小时
本帖最后由 EroicaCMCS 于
16:33 编辑
xingzhui222 发表于
楼主有定时爬网页的经验么。。
如果要每天定时哪个时间跑下程序然后抓的数据放到一个file里。虽然我知道li ...
没有这方面的经验。。。
肯定不能用笔记本啦,可以试一下免费的云平台,比如:sina app engine, google app engine
精华主题学分
在线时间 小时
FYI urllib is not thread safe.
精华主题学分
在线时间 小时
本帖最后由 ysyyork 于
19:18 编辑
抓网页抓了几个月。发现有的网站老变html代码格式。真是烦。。。
话说有个爬虫框架很好用介绍给大家Scrapy,虽然灵活性还是自己写的强,但是他的模板足以完成基本的爬取任务。有兴趣可以看看这个:
对于自动屏蔽ip的问题,你可以不要连着抓取,每次抓取完了用sleep函数睡眠一个random时间再抓,这样模拟浏览器访问,不容易被屏蔽。我之前爬豆瓣,连着怕60次就gg了,后来用sleep爬到150多次都没问题。再多应该也没问题,我没试过
<p id="rate_16" onmouseover="showTip(this)" tip="感谢分享!&大米 + 20 升
" class="mtn mbn">
精华主题学分
在线时间 小时
写得很好~刚好用得上~超级感谢~
精华主题学分
在线时间 小时
特别的,好赞!
精华主题学分
在线时间 小时
我在网上看了一个VBA的课程,目前才开始觉得很不错。应该学完VBA是可以试试这个程序的吧。打基础的过程开始了,纯文科背景的没有办法啊
精华主题学分
在线时间 小时
写的很好。简明扼要。Mining the Social Web不错
<form method="post" autocomplete="off" id="fastpostform" action="forum.php?mod=post&action=reply&fid=172&tid=83337&extra=&replysubmit=yes&infloat=yes&handlekey=fastpost"
onSubmit="
// TODO Howard 11/3/2015
var sbtn = $('fastpostsubmit');
sbtn.disabled =
sbtn.innerHTML = ' 回复发表中... ';
sbtn.setAttribute('background', sbtn.style.background);
sbtn.setAttribute('bordercolor', sbtn.style.borderColor);
sbtn.style.background = '#C7C7C7';
sbtn.style.borderColor = '#8B8B8B';
var form =
// --product--
var isValid = fastpostvalidate(form, null, 0);
if(!isValid) reoverBtn();
return isV
// --product--
// --testing--
//setTimeout(function() {
// var isValid = fastpostvalidate(form, null, 0);
// if(!isValid) reoverBtn();
//}, 2000);
// --testing--
您需要登录后才可以回帖
回帖并转播
回帖后跳转到最后一页
Instant搜索更强大,不扣积分,内容组织的更好更整洁!目前仍在beta版本,努力完善中!
一亩三分地推荐 /5
地主Warald亲手做你的申请,针对你的背景和目标,考虑申请、学习、就业、移民等系列问题,制定申请策略。
“offer”指全额奖学金,免学费全免+每月工资,Berkeley, CMU, JHU, UIUC, Gatech, UMich, UCLA, Columbia,欢迎观赏。
电子工程、计算机、统计、金数金工、化工等, Stanford, Berkeley, CMU, Cornell, Yale, Columbia, Chicago, Duke, UPenn, UIUC, Brown, UMich, JHU等
有留学、申请、找工、职业规划上的难题?先上论坛提问!
论坛考古也帮不上忙,发帖得到的回答仍然不够?电话找Warald来解答!
WARALD新书上市啦:《你不知道的美国留学》清华大学出版社,各大电商发售
Powered by作者:林骏翔
想做数据,首先从获取数据开始。但是对于需要获取什么数据,数据可以干什么,很多人还是一头雾水,知乎达人林骏翔给出了参考。本文来林骏翔在知乎的回答,已获授权,转载请联系林骏翔。
一大波数据来袭!题主问了有什么网站,能用来做什么。我给出几个API网站吧,做APP用的可能比较多,不过也可以用在日常生活中。
一、生活服务
手机话费充值。
天气查询。
快递查询。
健康食谱。
水电煤缴费。
电影大全。
谜语、歇后语、脑筋急转弯。
音乐搜索。
健康知识。
百度糯米、团购等信息。
以上接口都来自网站:
细心的人会发现,这些功能简直是遍地都是啊,支付宝、微信什么的一大堆,哪用那么麻烦!是的,但我相信这些可能为一些不太了解相关信息的人提供了帮助。不过,虽然这些功能很多APP都有,如果自己有空闲时间又懂得编程,不喜欢别人的UI设计,自己做一做也是挺好玩的。比如:生活枯燥了,把这些谜语歇后语等根据个人喜好定时推送到自己的手机,放松身心;把一些健康小知识在空闲时间推送给自己,提醒自己……
国内类似的网站还有:
API数据接口_开发者数据定制/
API Store_为开发者提供最全面的API服务/
API数据接口_免费数据调用-91查|/
除此之外还有一些门户网站提供了一些API接口,比如豆瓣、新浪、百度等等。
二、金融数据
①新浪财经
最多人用的就是新浪财经了,因为它是免费的,并且使用起来也不难。以下是网上找的教程:获取历史和实时股票数据接口(/seacryfly/articles/stock.html)
②东方财富网
网站提供了大量信息,也是基本面投资者的好去处。可以查看财务指标或者根据财务指标选股(如净资产收益率): &
这些都是很好的投资参考,当然还有其它功能有对应的API,可以自己分析一下。
/cfidata.aspx提供各种产品的数据
(国内很多功能类似网站,如和讯、网易财经、雪球等等,具体的我没有一一试验就不放上来了,各位可以自己去试试,下同。)
2.大宗商品
①黄金头条——用资讯帮你赚钱/
这里提供了各种大宗商品的行情,也可以分析获取。包括技术分析方面。
②当然还有外国网站:/
3.美股等综合类(其实新浪财经和东方财富等也算是国内综合的了,就不一一列举了)
①Wind资讯。很多机构用的都是这里的数据,当然普通个人是拿不到的,不过如果你是财经院校的学生,他们会提供免费的数据。详见官网。
②MarketData Feed and API
(/)外国网站,提供了大量数据,付费。有试用期。
③Quandl Financial and Economic Data
(/)同上。部分免费。
④96Stocks APIs: Bloomberg, NASDAQ and E*TRADE
外国网站整合的96个股票API合集,可以看看。
⑤雅虎财经http://www./
香港版https://hk./
下面提到的Quandl网站有一个他们自己的Python库,叫Quandl,可惜也是收费的。
pip install Quandl
http://tushare.org/fundamental.html#id4 国内好心人做的开源财经数据接口(觉得好的可以捐助一下)。这里几乎可以获取到A股的所有信息了,还包括一些经济数据。重点是他不仅免费,还提供了一个Python库tushare。
撇去上面的API不说,如果单单爬取网页上的内容下来,那就太多可以爬的了。
如:1.爬取网站上的图片。包括贴吧、知乎、Tumblr、轮子哥、XXX(你懂的)。
2.爬取影评、电影资讯、图书等等。比如豆瓣电影。轻轻松松掌握好书好电影。
3.爬取社交网络。比如新浪微博,Twitter。(Twitter提供了API,可以提交关键字等信息爬取搜索结果中的每一条内容。)爬完可以对整个社交网络群体做个分析,情绪、作息、区域……
4.一些网站有你喜欢的文章或者帖子,但是他们没有APP或者是APP做得不友好,你可以直接爬取页面信息推送到手机上。
5.做一个微信公众号。有了上面那么多数据,还怕公众号没东西?生活服务、选股器、行情分析、文章推送等等等。
via:数据客
转载请注明来自36大数据(): &
除非特别注明,本站所有文章均不代表本站观点。报道中出现的商标属于其合法持有人。请遵守理性,宽容,换位思考的原则。匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。

我要回帖

 

随机推荐