python数据采集教程(如何用最简单的Python爬虫采集整个网站)

1.如何用最简单的Python爬虫采集整个网站

在之前的文章中Python实现“维基百科六度分隔理论“之基础爬虫,我们实现了在一个网站上随机地从一个链接到另一个链接,但是,如果我们需要系统地把整个网站按目录分类,或者要搜索网站上的每一个页面,我们该怎么办?我们需要采集整个网站,但是那是一种非常耗费内存资源的过程,尤其是处理大型网站时,比较合适的工具就是用一个数据库来存储采集的资源,之前也说过。

下面来说一下怎么做。网站地图sitemap网站地图,又称站点地图,它就是一个页面,上面放置了网站上需要搜索引擎抓取的所有页面的链接(注:不是所有页面,一般来说是所有文章链接。

大多数人在网站上找不到自己所需要的信息时,可能会将网站地图作为一种补救措施。搜索引擎蜘蛛非常喜欢网站地图。

对于SEO,网站地图的好处:1.为搜索引擎蜘蛛提供可以浏览整个网站的链接简单的体现出网站的整体框架出来给搜索引擎看;2.为搜索引擎蜘蛛提供一些链接,指向动态页面或者采用其他方法比较难以到达的页面;3.作为一种潜在的着陆页面,可以为搜索流量进行优化;4.如果访问者试图访问网站所在域内并不存在的URL,那么这个访问者就会被转到“无法找到文件”的错误页面,而网站地图可以作为该页面的“准”内容。数据采集采集网站数据并不难,但是需要爬虫有足够的深度。

我们创建一个爬虫,递归地遍历每个网站,只收集那些网站页面上的数据。一般的比较费时间的网站采集方法从顶级页面开始(一般是网站主页),然后搜索页面上的所有链接,形成列表,再去采集到的这些链接页面,继续采集每个页面的链接形成新的列表,重复执行。

很明显,这是一个复杂度增长很快的过程。加入每个页面有10个链接,网站上有5个页面深度,如果采集整个网站,一共得采集的网页数量是105,即100000个页面。

因为网站的内链有很多都是重复的,所以为了避免重复采集,必须链接去重,在Python中,去重最常用的方法就是使用自带的set集合方法。只有“新”链接才会被采集。

看一下代码实例:from urllib.request import urlopenfrom bs4 import BeautifulSoupimport repages = set()def getLinks(pageurl):globalpageshtml= urlopen("" + pageurl)soup= BeautifulSoup(html)forlink in soup.findAll("a", href=re.compile("^(/wiki/)")):if'href' in link.attrs:iflink.attrs['href'] not in pages:#这是新页面newPage= link.attrs['href']print(newPage)pages.add(newPage)getLinks(newPage)getLinks("")原理说明:程序执行时,用函数处理一个空URL,其实就是维基百科的主页,然后遍历首页上每个链接,并检查是否已经在全局变量集合pages里面,如果不在,就打印并添加到pages集合,然后递归处理这个链接。递归警告:Python默认的递归限制是1000次,因为维基百科的链接浩如烟海,所以这个程序达到递归限制后就会停止。

如果你不想让它停止,你可以设置一个递归计数器或者其他方法。采集整个网站数据为了有效使用爬虫,在用爬虫的时候我们需要在页面上做一些事情。

我们来创建一个爬虫来收集页面标题、正文的第一个段落,以及编辑页面的链接(如果有的话)这些信息。第一步,我们需要先观察网站上的页面,然后制定采集模式,通过F12(一般情况下)审查元素,即可看到页面组成。

观察维基百科页面,包括词条和非词条页面,比如隐私策略之类的页面,可以得出下面的规则:所有的标题都是在h1→span标签里,而且页面上只有一个h1标签。所有的正文文字都在div#bodyContent标签里,如果我们想获取第一段文字,可以用div#mw-content-text→p,除了文件页面,这个规则对所有页面都适用。

编辑链接只出现在词条页面上,如果有编辑链接,都位于li#ca-edit标签的li#ca-edit→span→a里面。调整一下之前的代码,我们可以建立一个爬虫和数据采集的组合程序,代码如下:import redef getLinks(pageUrl):global pageshtml = urlopen("" + pageUrl)soup = BeautifulSoup(html)try:print(soup.h1.get_text())print(soup.find(id="mw-content-text").findAll("p")[0])print(soup.find(id="ca-edit").find("span").find("a").attrs['href'])except AttributeError:print("页面缺少属性")for link in soup.findAll("a", href =re.compile("^(/wiki/)")):if 'href' in link.attrs:#这是新页面newPage = link.attrs['href']print("------------------\n"+newPage)这个for循环和原来的采集程序基本上是一样的,因为不能确定每一页上都有所有类型的数据,所以每个打印语句都是按照数据在页面上出现的可能性从高到低排列的。

数据存储到MySQL前面已经获取了数据,直接打印出来,查看比较麻烦,所以我们就直接存到MySQL里面吧,这里只存链接没有意义,所以我们就存储页面的标题和内容。前面我有两篇文章已经介绍过如何存储数据到MySQL,数据表是pages,这里直接给出代码:import reimport datetimeimport randomimport pymysqlconn = pymysql.connect(host = '127.0.0.1',port = 3306, user = 'root', passwd = '19930319', db = 'wiki', charset ='utf8m。

2.如何学习爬虫技术抓取数据

学习任何一门语言都是从入门,通过不间断练习达到熟练水准,少数人最终能精通语言,成为执牛耳者,他们是金字塔的最顶层。

当你决定学Python爬虫时,需要有一个清晰且短期内可实现的目标,比如通过学习找一份初级程序员工作。目标明确后,你需要知道企业对Python程序员的技能有哪些要求。

可能你会纠结是学Python2还是Python3,就像手里同时有包子和馒头,不知道先吃哪个,这种纠结完全就是徒增烦恼。

因为它们是同一种语言,只有少部分地方语法不兼容。Python3逐渐成为主流已是不争事实,毕竟后者性能方面更占有优势,官方也在力推Python3。所以选Python3吧,最多花一天的时间能把Python2中特有的内容搞懂。

至于有哪些资源现在可以用,你可以积极参与到相关的技术圈子中去,尝试去解答力所能及的新手问题,向圈子中的大牛们寻求帮助,善于总结自己所学到的东西,分享给更多的人。记住,你不是一个人在战斗!

只看书不会进步,思考和实践才有成长,自学编程是一个比较枯燥的过程,一定要坚持。

哦对了,目前我也在学习,你可以看一下这个基础视频,很有帮助的。

python基础视频教程

3.如何评价利用python制作数据采集,计算,可视化界面呢

如何评价利用python制作数据采集,计算,可视化界面1、为什么用Python做数据分析首先因为Python可以轻松地集成C、C++、Fortran代码,一些底层用C写的算法封装在python包里后性能非常高效。

并且Python与Ruby都有大量的Web框架,因此用于网站的建设,另一方面个人觉得因为Python作为解释性语言相对编译型语言更为简单,可以通过简单的脚本处理大量的数据。而组织内部统一使用的语言将大大提高工作效率。

2、为什么用R做数据分析R的优势在于有包罗万象的统计函数可以调用,特别是在时间序列分析方面(主要用在金融分析与趋势预测)无论是经典还是前沿的方法都有相应的包直接使用;相比python在这方面贫乏不少。另外R语言具有强大的可视化功能,一个散点图箱线图可以用一条程序搞定,相比Excel更加简单。

在使用环境方面,SAS在企业、政府及军事机构使用较多,因其权威认证;SPSS、R大多用于科研机构,企业级应用方面已有大量的商业化R软件,同时可结合(具体怎么结合,尚未搞明白)Hadoop进行数据挖掘。

4.python数据分析该怎么入门呢

python数据分析的门槛较低,如果是python零基础开始学,学习的步骤大概是python基础、数据采集、数据处理、数据分析、数据可视化。

首先学习一点python基础的知识,Python语言基础,函数,文件操作,面向对象,异常处理,模块和包,Linux系统使用,Mysql数据库等;其次就可以学习一些基本的爬虫,进行数据采集,当然也有很多爬虫工具,直接使用即可。然后就可以学习数据分析方面知识,主要是学习pandas、numpy等等;再然后就要学习数据可视化来向别人展现数据,常用matplotlib实现,主要包括一些基本的统计图的绘制,比如条形图,柱状图,散点图。

还有一些进阶绘图,比如分位数图,相关系数图等等。还需要掌握3D绘图可视化。

5.如何利用python对网页的数据进行实时采集并输出

这让我想到了一个应用场景,在实时网络征信系统中,通过即时网络爬虫从多个信用数据源获取数据。并且将数据即时注入到信用评估系统中,形成一个集成化的数据流。

可以通过下面的代码生成一个提取器将标准的HTML DOM对象输出为结构化内容。

图片来自集搜客网络爬虫官网,侵删。

python数据采集教程

转载请注明出处代码入门网 » python数据采集教程(如何用最简单的Python爬虫采集整个网站)

资讯

python秒数转时间(python将这个时间格式转化为秒数)

阅读(39)

本文主要为您介绍python秒数转时间,内容包括python将这个时间格式转化为秒数,Python函数将秒到分钟,小时,天问题,怎么解决,利用Python怎么得到现在时间的秒数并转换为整型。先把时间格式“1:23:20:27.00” 转化为字符串s1="1:23:20:27.00"#a=

资讯

pythonstdcall(python生成shellcode库有哪些)

阅读(83)

本文主要为您介绍pythonstdcall,内容包括python生成shellcode库,python怎么安装xlrd,我会Python,且第三方系统有接口,我应该如何通过Python去调用第。python中有个概念叫模块,模块中包含了定义的函数,方便重用。使用模块的语句如下:import 模

资讯

python是否可迭代(python判断是否能够迭代)

阅读(27)

本文主要为您介绍python是否可迭代,内容包括python里哪些是可迭代对象,python判断是否能够迭代,python判断是否能够迭代。方法是通过collections模块的Iterable类型判断:>>> from collections import Iterable

资讯

python库知乎(python图像处理库哪个好知乎)

阅读(80)

本文主要为您介绍python库知乎,内容包括python图像处理库哪个好知乎,python图像处理库哪个好知乎,Python常用的标准库以及第三方库。#coding:utf-8#使用的库import csv,os,sysimport xlwt,xlrdfrom xlrd import

资讯

python动态实例化(python的类中怎么实现动态化函数)

阅读(42)

本文主要为您介绍python动态实例化,内容包括python的类中怎么实现动态化函数,python类实例化,Python中类是怎么实例化的为什么在创建实例之后还能添加属性。给你这样一个例子吧,这个例子里面有动态增加类的函数。声明一个类,类初始化的时候读

资讯

python开发游戏脚本(游戏开发中常用哪种脚本语言)

阅读(75)

本文主要为您介绍python开发游戏脚本,内容包括python怎么写游戏脚本,python怎么写游戏脚本,python可以做游戏吗。一般大型的商业游戏引擎有自己的脚本语言,比如Unreal3就有自己的一套Unreal Script ,Unity3d可以用C#、Java

资讯

python2.764位pil(win764位怎么安装python和nltk)

阅读(29)

本文主要为您介绍python2.764位pil,内容包括win764位系统安装了python2.7又安装了PIL第三方64位模块在使用时,win764位怎么安装python和nltk,python哪个版本可以加pil。你装的是什么版本的python。如果你是2.7版本,并且电脑是64位机器。建议

资讯

python小数点保留1位(如何在Python中保留小数)

阅读(12)

本文主要为您介绍python小数点保留1位,内容包括如何在Python中保留小数,Python中小数点的问题,怎么放弃后面位数,只保留前面两位搜狗,python中保留几位小数进行四舍五入的round函数自身的源代码是什么。f = lambda x, n: round(x, n - len(

资讯

python写入文件编码格式(python2.7.4怎么指定格式编码的文本)

阅读(11)

本文主要为您介绍python写入文件编码格式,内容包括python写文件怎么写gbk编码的文件,python2.7.4怎么指定格式编码的文本,python2.7.4怎么指定格式编码的文本。要写入的数据本身就是byte串(u中文是中文字符串,中文是byte串),用二进制方式打开就

资讯

python画仪表(如何使用Python在屏幕上作画)

阅读(13)

本文主要为您介绍python画仪表,内容包括如何用python绘制各种图形,如何用Python绘制Circos图,如何使用Python在屏幕上作画。from turtle import *def curvemove():for i in range(200):right(1)forw

资讯

python判定整数(怎样用python判断整数)

阅读(15)

本文主要为您介绍python判定整数,内容包括python怎么判断一个数是整数,python判断一个数是不是整数,python判断一个数是不是整数。import typesif type(var) in [types.IntType,types.LongType]: bodyelse

资讯

python3好书(python三本经典书籍都是什么)

阅读(16)

本文主要为您介绍python3好书,内容包括python三本经典书籍都是什么,学习python3都好的书,求本适合学习python3.2的书或者电子版资料。python三本经典书籍有:《深度学习入门:基于Python的理论与实现》,《Python高性能(第2版)》,《Python科学计算最

资讯

python3.4爬虫入门(如何入门Python爬虫)

阅读(13)

本文主要为您介绍python3.4爬虫入门,内容包括如何入门Python爬虫,python爬虫入门需要哪些基础,python爬虫自学要多久。可以先从简单的开始,在熟悉了Python语法后,学习用 urllib 和 urllib2 爬虫,使用 BeautifulSoup 分析结

资讯

python秒数转时间(python将这个时间格式转化为秒数)

阅读(39)

本文主要为您介绍python秒数转时间,内容包括python将这个时间格式转化为秒数,Python函数将秒到分钟,小时,天问题,怎么解决,利用Python怎么得到现在时间的秒数并转换为整型。先把时间格式“1:23:20:27.00” 转化为字符串s1="1:23:20:27.00"#a=

资讯

pythonstdcall(python生成shellcode库有哪些)

阅读(83)

本文主要为您介绍pythonstdcall,内容包括python生成shellcode库,python怎么安装xlrd,我会Python,且第三方系统有接口,我应该如何通过Python去调用第。python中有个概念叫模块,模块中包含了定义的函数,方便重用。使用模块的语句如下:import 模

资讯

python是否可迭代(python判断是否能够迭代)

阅读(27)

本文主要为您介绍python是否可迭代,内容包括python里哪些是可迭代对象,python判断是否能够迭代,python判断是否能够迭代。方法是通过collections模块的Iterable类型判断:>>> from collections import Iterable

资讯

python库知乎(python图像处理库哪个好知乎)

阅读(80)

本文主要为您介绍python库知乎,内容包括python图像处理库哪个好知乎,python图像处理库哪个好知乎,Python常用的标准库以及第三方库。#coding:utf-8#使用的库import csv,os,sysimport xlwt,xlrdfrom xlrd import

资讯

python动态实例化(python的类中怎么实现动态化函数)

阅读(42)

本文主要为您介绍python动态实例化,内容包括python的类中怎么实现动态化函数,python类实例化,Python中类是怎么实例化的为什么在创建实例之后还能添加属性。给你这样一个例子吧,这个例子里面有动态增加类的函数。声明一个类,类初始化的时候读

资讯

python开发游戏脚本(游戏开发中常用哪种脚本语言)

阅读(75)

本文主要为您介绍python开发游戏脚本,内容包括python怎么写游戏脚本,python怎么写游戏脚本,python可以做游戏吗。一般大型的商业游戏引擎有自己的脚本语言,比如Unreal3就有自己的一套Unreal Script ,Unity3d可以用C#、Java

资讯

python2.764位pil(win764位怎么安装python和nltk)

阅读(29)

本文主要为您介绍python2.764位pil,内容包括win764位系统安装了python2.7又安装了PIL第三方64位模块在使用时,win764位怎么安装python和nltk,python哪个版本可以加pil。你装的是什么版本的python。如果你是2.7版本,并且电脑是64位机器。建议

资讯

pythondlib使用(dlib库,怎么在python中安装)

阅读(27)

本文主要为您介绍pythondlib使用,内容包括dlib库,怎么在python中安装,如何线上部署用python基于dlib写的人脸识别算法,如何使用dlib库。这几天刚好用到Python,其中用到了Dlib库的人脸对齐算法。python中需要用到import dlib.pyd文件,这个文件