python网页数据抓取( 数据科学越来越怎么抓网页数据(一)_Python学习)
优采云 发布时间: 2022-02-09 01:21python网页数据抓取(
数据科学越来越怎么抓网页数据(一)_Python学习)
前言:数据科学越来越流行,网页是一个很大的数据来源。最近有很多人问如何抓取网页数据。据我所知,常用的编程语言(C++、java、python)都可以实现网页数据抓取,甚至很多统计计算语言(R、Matlab)都可以实现和网站交互包。我试过用java、python、R爬取网页,感觉语法不一样,但是逻辑是一样的。我将使用python来谈谈网络抓取的概念。具体内容需要看说明书或者google别人的博客。水平有限,有错误或者有更好的方法,欢迎讨论。第 1 步:熟悉 Python 的基本语法。如果您已经熟悉 Python,请跳至第 2 步。 Python 是一种相对容易上手的编程语言,如何上手取决于编程基础。(1)如果你有一定的编程基础,建议看google的python课,链接这个是两天的短期培训课程(当然是全天),大概七个视频,每个之后video 给编程作业,每个作业一个小时内完成 这是我学python上的第二门课(第一门课是codecademy的python,很久以前看过,很多记不得了内容),我每天都看视频+编程作业用了一个多小时,六天完成,效果还不错,用python写基础程序没有问题。跳到第 2 步。 Python 是一种相对容易上手的编程语言,如何上手取决于编程基础。(1)如果你有一定的编程基础,建议看google的python课,链接这个是两天的短期培训课程(当然是全天),大概七个视频,每个之后video 给编程作业,每个作业一个小时内完成 这是我学python上的第二门课(第一门课是codecademy的python,很久以前看过,很多记不得了内容),我每天都看视频+编程作业用了一个多小时,六天完成,效果还不错,用python写基础程序没有问题。跳到第 2 步。 Python 是一种相对容易上手的编程语言,如何上手取决于编程基础。(1)如果你有一定的编程基础,建议看google的python课,链接这个是两天的短期培训课程(当然是全天),大概七个视频,每个之后video 给编程作业,每个作业一个小时内完成 这是我学python上的第二门课(第一门课是codecademy的python,很久以前看过,很多记不得了内容),我每天都看视频+编程作业用了一个多小时,六天完成,效果还不错,用python写基础程序没有问题。Python是一门相对容易上手的编程语言,如何上手取决于编程基础。(1)如果你有一定的编程基础,建议看google的python课,链接这个是两天的短期培训课程(当然是全天),大概七个视频,每个之后video 给编程作业,每个作业一个小时内完成 这是我学python上的第二门课(第一门课是codecademy的python,很久以前看过,很多记不得了内容),我每天都看视频+编程作业用了一个多小时,六天完成,效果还不错,用python写基础程序没有问题。Python是一门相对容易上手的编程语言,如何上手取决于编程基础。(1)如果你有一定的编程基础,建议看google的python课,链接这个是两天的短期培训课程(当然是全天),大概七个视频,每个之后video 给编程作业,每个作业一个小时内完成 这是我学python上的第二门课(第一门课是codecademy的python,很久以前看过,很多记不得了内容),我每天都看视频+编程作业用了一个多小时,六天完成,效果还不错,用python写基础程序没有问题。而如何上手则取决于编程基础。(1)如果你有一定的编程基础,建议看google的python课,链接这个是两天的短期培训课程(当然是全天),大概七个视频,每个之后video 给编程作业,每个作业一个小时内完成 这是我学python上的第二门课(第一门课是codecademy的python,很久以前看过,很多记不得了内容),我每天都看视频+编程作业用了一个多小时,六天完成,效果还不错,用python写基础程序没有问题。而如何上手则取决于编程基础。(1)如果你有一定的编程基础,建议看google的python课,链接这个是两天的短期培训课程(当然是全天),大概七个视频,每个之后video 给编程作业,每个作业一个小时内完成 这是我学python上的第二门课(第一门课是codecademy的python,很久以前看过,很多记不得了内容),我每天都看视频+编程作业用了一个多小时,六天完成,效果还不错,用python写基础程序没有问题。s python 课,链接这是一个为期两天的短期培训课程(当然是整整两天),大约七个视频,每个视频后给出编程作业,每个作业可以在一个小时内完成。这是我学python上的第二门课(第一门课是codecademy的python,很久以前看的,很多内容记不清了),每天都看视频+编程作业花了更多一个多小时,六天完成。效果还不错。用python编写基本程序没有问题。s python 课,链接这是一个为期两天的短期培训课程(当然是整整两天),大约七个视频,每个视频后给出编程作业,每个作业可以在一个小时内完成。这是我学python上的第二门课(第一门课是codecademy的python,很久以前看的,很多内容记不清了),每天都看视频+编程作业花了更多一个多小时,六天完成。效果还不错。用python编写基本程序没有问题。这是我学python上的第二门课(第一门课是codecademy的python,很久以前看的,很多内容记不清了),每天都看视频+编程作业花了更多一个多小时,六天完成。效果还不错。用python编写基本程序没有问题。这是我学python上的第二门课(第一门课是codecademy的python,很久以前看的,很多内容记不清了),每天都看视频+编程作业花了更多一个多小时,六天完成。效果还不错。用python编写基本程序没有问题。
我推荐的可能不适合你。你可以先看看这个帖子【长期红利帖】介绍一下别人在你上过的公开课上都说了些什么,或者看课程评论再决定。第 2 步:了解如何与 网站 建立链接并获取网页数据。访问以获取更多信息。编写脚本与网站交互,熟悉python和网页相关的几个模块(urllib、urllib2、httplib)之一,只知道一个,其他类似。这三个是python提供的与网页交互的基础模块,还有其他的,比如:mechanize和scrapy,我没用过,可能性能更好,欢迎补充。对于基本的网页抓取,前三个模块就足够了。
1.# 导入模块urllib2
2.导入 urllib2
3.。
4.# 查询任意一个文章,比如On random graph。对于每个查询 google 。更多。
5.# 学者有一个url,这个url形成的规则要自己分析。.
6.查询 = 'On+random+graph'
7.url ='#39; + 查询 +'&btnG=&as_sdt=1%2C5&as_sdtp='
8.# 设置头文件。爬取一些网页不需要特殊的头文件,但是如果这里没有设置,
9.# Google 会认为机器人不允许访问。另外,访问一些网站和设置cookies会比较复杂。
10.#这里暂不提及。关于如何知道如何编写头文件,一些插件可以看到你正在使用的浏览器与 网站 交互
11.#头文件(很多浏览器自带这个工具),我用的是firefox的firebug插件。
12.header = {'主机':'',
13.'用户代理': 'Mozilla/5.0 (Windows NT6.1; rv:26.0) Gecko/20100101 Firefox/2 6.0',
14.'接受':'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
15.'Accept-Encoding': 'gzip, deflate',
16.'连接':'保持活动'}
17.#建立连接请求,然后谷歌服务器返回页面信息给变量con,con是一个对象。/bbs
18.req = urllib2.Request(url, headers =header)
19.con = urllib2.urlopen(req)
20.#在con对象上调用read()方法,返回一个html页面,即带有html标签的纯文本
21.doc = con.read()。
22.#关闭连接。就像读完文件后关闭一样,如果不关闭,有时还可以,但有时会出现问题,
23.#所以作为一个守法的好公民,还是关闭连接比较好。
24.con.close()
复制代码
上面的代码将google Academic上查询On Random Graph的结果返回给doc变量,和打开google Academic搜索On Random Graph然后在网页上右键保存是一样的。步骤 三、 解析网页。飤鐢pet 咁勽潧 – 涓€浜╀银咗湴以上步骤获取网页的信息,但是收录html标签,需要去掉这些标签,然后从html文本中整理出有用的信息,你需要解析这个网页。解析网页的方法:不需要编写脚本,也不需要查询数据库上的数据,可以直接在notepad++上结合正则表达式使用。如何学习正则表达式推荐看:正则表达式30分钟入门教程,链接:(2) BeautifulSoup module. BeautifulSoup 是一个非常强大的模块,可以将 html 文件解析成一个对象,也就是一棵树。我们都知道html文件是树状的,比如body -> table -> tbody -> tr,对于tbody节点,tr的子节点很多。BeautifulSoup 可以很方便的获取特定节点,也可以针对单个节点获取其兄弟节点。网上有很多相关的说明,这里就不赘述了,只演示一个简单的代码:( 3) 结合使用以上两种方法。
1.#导入BeautifulSoup模块和re模块,re是python中正则表达式的模块
2.导入 BeautifulSoup
3.导入重新。来自:/bbs
4.# 生成一个soup对象,第2步中提到了doc - google 1point3acres
5.汤=BeautifulSoup.BeautifulSoup(doc)
6.# 获取论文标题、作者、简短描述、引用次数、版次次数、文章 引用列表的超链接
7.#这里也用到了一些正则表达式,如果不熟悉,应该先无知。至于“类”:在“gs_rt”中
8.# 'gs_rt' 是怎么来的?这是通过分析html文件肉眼看到的。上面提到的firebug插件
9.# 让这个很简单,就是一个小网页,就可以知道对应html标签的位置和属性,
10.# 效果很好。
11.paper_name = soup.html.body.find('h3',{'class' : 'gs_rt'}).text
12.paper_name = re.sub(r'[.*]', '',paper_name) # 去掉'[]'标签,比如'[PDF]'.1point3acres
13.paper_author =soup.html.body.find('div', {'class' : 'gs_a'}).text
14.paper_desc = soup.html.body.find('div',{'class' : 'gs_rs'}).text
15.temp_str = soup.html.body.find('div',{'class' : 'gs_fl'}).text.更多信息
16.temp_re =re.match(r'[A-Za-zs]+(d*)[A-Za-zs]+(d*)', temp_str)
17.citeTimes = temp_re.group(1)
18.versionNum = temp_re.group(2)
19.如果 citeTimes == '':
20. citeTimes = '0'。更多信息
21.如果版本号 == '':
22. 版本号 = '0'。更多信息
23.citedPaper_href =soup.html.body.find('div', {'class' : 'gs_fl'}).a.attrs[0][1]
复制代码
.from: /bbs 这些是我正在分析引文网络的一个项目的代码。对了,我从googlescholar那里抓取了论文和引文列表的信息,在我访问了大约1900次的时候就屏蔽了google,导致这个区的ip一时间无法登录googlescholar。第 4 步:访问数据。/bbs 终于抓到数据了,现在只存到内存中,必须保存好才能使用。(1) 最简单的方法是将数据写入txt文件,可以用Python实现,代码如下:
1.# 打开文件webdata.txt,生成目标文件。该文件可能不存在。参数 a 表示将其添加到其中。
2.#还有其他参数,比如'r'只能读不能写,'w'可以写但删除原记录等。
3.file = open('webdata.txt','a')
4.line = paper_name + '#' + paper_author +'#' + paper_desc + '#' + citeTimes + 'n'。
5.#目标文件的write方法将字符串行写入文件
6.file = file.write(line)
7.# 再次做一个随心所欲关闭文件的好青年
8.file.close()
复制代码
这样,从网页中抓取并解析出来的数据就存储在本地了,是不是很简单呢?(2)当然也可以直接连接数据库而不是写入txt文件。python中的mysqldb模块可以与mysql数据库交互,将数据直接倒入数据库,与MySQL数据库的逻辑类似于与网站服务器建立链接的逻辑,如果你之前学过数据库,学习使用MySQLdb模块与数据库交互是非常简单的;数据库开放系统学习,w3school作为参考或作为手册使用,/bbsPython能链接数据库的前提是数据库是开放的,我用win7 + MySQL5.5,数据库是当地的。
1.% 可以使用cmd打开数据库。启动命令为: . 访问更多。
启动 mysql55. /bbs
3.% 平仓订单为:
停止mysql55
复制代码
使用 MySQLdb 模块的代码示例:
1.# 导入 MySQLdb 模块。链条已连接。1点3英亩
2.导入 MySQLdb
3.#与服务器建立链接,host为服务器ip,我的mysql数据库建在这台机器上,默认为127.0.0.1,
4.# 可以相应地输入用户、密码和数据库名称。默认端口号为3306,charset为编码方式。
5.#默认是utf8(也可能是gbk,看安装的版本)。
6.conn = MySQLdb.connect(host='127.0.0.1',user='root', passwd='yourPassword', db='dbname' , 端口=3306, 字符集='utf8')
7.# 创建光标
8.cur = conn.cursor()
9.#通过对象cur的execute()方法执行SQL语句
10.cur.execute("select * fromciteRelation where paperName = 'On Random Graph'")
11.# fetchall()方法获取查询结果,返回一个列表,可以这样直接查询:list[i][j],
12.#i代表查询结果中的i+1条记录,j代表这条记录的j+1个属性(别忘了python是从0开始计数的)
13.list = cur.fetchall()
14.#还可以进行delete、drop、insert、update等操作,比如:
15.sql = "更新 studentCourseRecordset 失败 = 1 其中 studentID = '%s' 和 termID = '%s' 和 courseID ='%s'" %(studentID,course[0],course[1])
16.cur.execute(sql)
17.#与查询不同,在执行delete、insert、update语句后,必须执行以下命令才能成功更新数据库
mit()
19.#和往常一样,使用完记得关闭光标,再关闭链接
20.cur.close()
21.conn.close()
复制代码
这样就实现了Python与数据库的交互。除了 MySQL 数据库,python 的 PyGreSQL 模块可以支持 postgreSQL 数据库,原因类似。另外,如果你的网页收录中文,设置编码格式会很麻烦。您需要服务器、Python、数据库和数据库接口使用相同的编码格式,以避免出现乱码。如果出现中文乱码问题,请相信,你并不孤单!!去google吧,成千上万的人遇到过这个问题。./bbs 关于编码问题,附上我看到的一篇博文: ./bbs 后记:上面介绍了抓取网页数据的方法。数据捕获只是一小步。如何分析数据是大学的问题。欢迎讨论。以上内容如有不明之处,欢迎交流。.waral是长链,特别注意:网站的*敏*感*词*爬取会给网站的服务器带来很大的压力,尽量选择服务器相对宽松的时间(如清晨)。网站很多,不要用三分之一英亩来测试。Python 的 time 模块的 sleep() 方法可以暂停程序一段时间。比如time.sleep(1)这里运行的时候程序暂停1秒。及时暂停可以缓解服务器压力,保护自己的硬盘,只是为了睡很久,或者去去健身房,结果出来了。更新:2014年2月15日,改了几个错别字;增加了相关课程链接;增加了udacity CS101的介绍;增加了MySQLdb模块的介绍。2014年2月16日,
原文来源于微信公众号(PPV类数据科学社区):