
首先我们要清晰一点是,所有的网页我们能看到的不管是文字还是还是动画,都是以html标记的,然后浏览器把这些标记可视化的美观的展示给我们,如果我们要做网络爬虫,那么我们的爬虫是没有视觉的,只有逻辑,在爬虫眼里只有html标签,其他的样式在爬虫眼里都是浮云,所以爬虫其实就是读取html标签(这里涉及一个知识点就是要能得到html标签,需要用到一个库是request库,通过网络请求拿到html元素),然后把html标签中自己想要的东西给提取出来,这个就是一个网络爬虫了。逻辑就这么简单。如果有python使用经验的,建议使用爬虫框架scrapy
网络爬虫是一个自动提取网页的程序,它为搜索引擎从万维网上下载网页,是搜索引擎的重要组成。\x0d\ 传统爬虫从一个或若干初始网页的URL开始,获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新的URL放入队列,直到满足系统的一定停止条件。对于垂直搜索来说,聚焦爬虫,即有针对性地爬取特定主题网页的爬虫,更为适合。\x0d\\x0d\ 以下是一个使用java实现的简单爬虫核心代码: \x0d\public void crawl() throws Throwable { \x0d\ while (continueCrawling()) { \x0d\ CrawlerUrl url = getNextUrl(); //获取待爬取队列中的下一个URL \x0d\ if (url != null) { \x0d\ printCrawlInfo(); \x0d\ String content = getContent(url); //获取URL的文本信息 \x0d\ \x0d\ //聚焦爬虫只爬取与主题内容相关的网页,这里采用正则匹配简单处理 \x0d\ if (isContentRelevant(content, thisregexpSearchPattern)) { \x0d\ saveContent(url, content); //保存网页至本地 \x0d\ \x0d\ //获取网页内容中的链接,并放入待爬取队列中 \x0d\ Collection urlStrings = extractUrls(content, url); \x0d\ addUrlsToUrlQueue(url, urlStrings); \x0d\ } else { \x0d\ Systemoutprintln(url + " is not relevant ignoring "); \x0d\ } \x0d\ \x0d\ //延时防止被对方屏蔽 \x0d\ Threadsleep(thisdelayBetweenUrls); \x0d\ } \x0d\ } \x0d\ closeOutputStream(); \x0d\}\x0d\private CrawlerUrl getNextUrl() throws Throwable { \x0d\ CrawlerUrl nextUrl = null; \x0d\ while ((nextUrl == null) && (!urlQueueisEmpty())) { \x0d\ CrawlerUrl crawlerUrl = thisurlQueueremove(); \x0d\ //doWeHavePermissionToVisit:是否有权限访问该URL,友好的爬虫会根据网站提供的"Robottxt"中配置的规则进行爬取 \x0d\ //isUrlAlreadyVisited:URL是否访问过,大型的搜索引擎往往采用BloomFilter进行排重,这里简单使用HashMap \x0d\ //isDepthAcceptable:是否达到指定的深度上限。爬虫一般采取广度优先的方式。一些网站会构建爬虫陷阱(自动生成一些无效链接使爬虫陷入死循环),采用深度限制加以避免 \x0d\ if (doWeHavePermissionToVisit(crawlerUrl) \x0d\ && (!isUrlAlreadyVisited(crawlerUrl)) \x0d\ && isDepthAcceptable(crawlerUrl)) { \x0d\ nextUrl = crawlerUrl; \x0d\ // Systemoutprintln("Next url to be visited is " + nextUrl); \x0d\ } \x0d\ } \x0d\ return nextUrl; \x0d\}\x0d\private String getContent(CrawlerUrl url) throws Throwable { \x0d\ //HttpClient41的调用与之前的方式不同 \x0d\ HttpClient client = new DefaultHttpClient(); \x0d\ HttpGet httpGet = new HttpGet(urlgetUrlString()); \x0d\ StringBuffer strBuf = new StringBuffer(); \x0d\ HttpResponse response = clientexecute(httpGet); \x0d\ if (HttpStatusSC_OK == responsegetStatusLine()getStatusCode()) { \x0d\ HttpEntity entity = responsegetEntity(); \x0d\ if (entity != null) { \x0d\ BufferedReader reader = new BufferedReader( \x0d\ new InputStreamReader(entitygetContent(), "UTF-8")); \x0d\ String line = null; \x0d\ if (entitygetContentLength() > 0) { \x0d\ strBuf = new StringBuffer((int) entitygetContentLength()); \x0d\ while ((line = readerreadLine()) != null) { \x0d\ strBufappend(line); \x0d\ } \x0d\ } \x0d\ } \x0d\ if (entity != null) { \x0d\ nsumeContent(); \x0d\ } \x0d\ } \x0d\ //将url标记为已访问 \x0d\ markUrlAsVisited(url); \x0d\ return strBuftoString(); \x0d\}\x0d\public static boolean isContentRelevant(String content, \x0d\Pattern regexpPattern) { \x0d\ boolean retValue = false; \x0d\ if (content != null) { \x0d\ //是否符合正则表达式的条件 \x0d\ Matcher m = regexpPatternmatcher(contenttoLowerCase()); \x0d\ retValue = mfind(); \x0d\ } \x0d\ return retValue; \x0d\}\x0d\public List extractUrls(String text, CrawlerUrl crawlerUrl) { \x0d\ Map urlMap = new HashMap(); \x0d\ extractHttpUrls(urlMap, text); \x0d\ extractRelativeUrls(urlMap, text, crawlerUrl); \x0d\ return new ArrayList(urlMapkeySet()); \x0d\} \x0d\private void extractHttpUrls(Map urlMap, String text) { \x0d\ Matcher m = (text); \x0d\ while (mfind()) { \x0d\ String url = mgroup(); \x0d\ String[] terms = urlsplit("a href=\""); \x0d\ for (String term : terms) { \x0d\ // Systemoutprintln("Term = " + term); \x0d\ if (termstartsWith("http")) { \x0d\ int index = termindexOf("\""); \x0d\ if (index > 0) { \x0d\ term = termsubstring(0, index); \x0d\ } \x0d\ urlMapput(term, term); \x0d\ Systemoutprintln("Hyperlink: " + term); \x0d\ } \x0d\ } \x0d\ } \x0d\} \x0d\private void extractRelativeUrls(Map urlMap, String text, \x0d\ CrawlerUrl crawlerUrl) { \x0d\ Matcher m = relativeRegexpmatcher(text); \x0d\ URL textURL = crawlerUrlgetURL(); \x0d\ String host = textURLgetHost(); \x0d\ while (mfind()) { \x0d\ String url = mgroup(); \x0d\ String[] terms = urlsplit("a href=\""); \x0d\ for (String term : terms) { \x0d\ if (termstartsWith("/")) { \x0d\ int index = termindexOf("\""); \x0d\ if (index > 0) { \x0d\ term = termsubstring(0, index); \x0d\ } \x0d\ String s = //" + host + term; \x0d\ urlMapput(s, s); \x0d\ Systemoutprintln("Relative url: " + s); \x0d\ } \x0d\ } \x0d\ } \x0d\ \x0d\}\x0d\public static void main(String[] args) { \x0d\ try { \x0d\ String url = ""; \x0d\ Queue urlQueue = new LinkedList(); \x0d\ String regexp = "java"; \x0d\ urlQueueadd(new CrawlerUrl(url, 0)); \x0d\ NaiveCrawler crawler = new NaiveCrawler(urlQueue, 100, 5, 1000L, \x0d\ regexp); \x0d\ // boolean allowCrawl = crawlerareWeAllowedToVisit(url); \x0d\ // Systemoutprintln("Allowed to crawl: " + url + " " + \x0d\ // allowCrawl); \x0d\ crawlercrawl(); \x0d\ } catch (Throwable t) { \x0d\ Systemoutprintln(ttoString()); \x0d\ tprintStackTrace(); \x0d\ } \x0d\}
作为零基础的你,我想你可能是想解决工作中的一个实际问题,或者仅仅是很想学习一下爬虫的技术,多一技之长。其实我准备开始学 Python 爬虫的时候也是一样,老板派了任务,暂时没有人会爬虫,我只有自学顶硬上。因此,我可以用思维图给你理清楚,你应该干什么。
我零基础但我想学网络爬虫:
路径1:我不想写代码,Excel/八爪鱼,用这些工具的好处是你可以很快上手,但是只能爬一些简单的网站,一旦网站出现限制,这些方法就是个玩具。因此,想弄点数据玩玩,玩这些玩具就好。
路径2:我可以学写代码,但是会不会很难啊?我以我的经验告诉你,找一个好的老师比自我胡思乱想,自我设限好得多。写代码这个事不难学,这也是为什么市面上有那么多代码速成的教学。这也是为什么我有些同学1年转专业进 Google 的事情发生。
这里给你描画一下你的学习之路:
学会 Python 的基本代码: 假如你没有任何编程基础,时间可能花1-2周,每天3小时。假设你有编程基础(VBA 也算吧),1小时。
理解爬虫原理:5分钟。为什么这么重要?我自认为学一个东西就像建大楼,先弄清楚大框架,然后再从地基学起。很多时候我们的学习是,还没弄懂大框架,就直接看网上的碎片化的教学,或者是跟着网上教学一章一章学,很容易学了芝麻丢了西瓜。我的自学就在这上面走了很多弯路。
应用爬虫原理做一个简单爬虫:30分钟。
先吃透获取网页:就是给一个网址发个请求,那么该网址会返回整个网页的数据。类似:你在浏览器键入网址,回车,然后你就看到了网站的整个页面。
再吃透解析网页:就是从整个网页的数据中提取你想要的数据。类似:你在浏览器中看到网站的整个页面,但是你想找到产品的价格,价格就是你想要的数据。
再学会储存数据:存储很简单,就是把数据存下来。
学会这些之后,你可以出去和别人说,我会 Python 爬虫,我想也没有人质疑你了。那么学完这一套下来,你的时间成本是多少呢?如果你有编程基础的话,1周吧。
所以,你是想当爬虫做个玩具玩玩,还是掌握一门实战利器。我觉得你可以自己衡量一下。
《网络爬虫与数据采集笔记电子分享》百度网盘pdf最新全集下载:
链接:https://panbaiducom/s/1EplzAFbwAQhZDHWXk7tTNA
pwd=fdwj 提取码:fdwj简介:网络爬虫与数据采集笔记系统地介绍了网络爬虫的理论知识和基础工具,包括网络爬虫涉及的Java基础知识、HTTP协议基础与网络抓包、网页内容获取等内容,让你对互联网理解的更加深刻。
请问什么是网络爬虫啊?是干什么的呢?
网络爬虫是一种程序,主要用于搜索引擎,它将一个网站的所有内容与链接进行阅读,并建立相关的全文索引到数据库中,然后跳到另一个网站样子好像一只大蜘蛛
当人们在网络上(如google)搜索关键字时,其实就是比对数据库中的内容,找出与用户相符合的网络爬虫程序的质量决定了搜索引擎的能力,如google的搜索引擎明显要比百度好,就是因为它的网络爬虫程序高效,编程结构好
什么是网络爬虫
1 爬虫技术研究综述
引言
随着网络的迅速发展,万维网成为大量信息的载体,如何有效地提取并利用这些信息成为一个巨大的挑战。搜索引擎(Search Engine),例如传统的通用搜索引擎AltaVista,Yahoo!和Google等,作为一个辅助人们检索信息的工具成为用户访问万维网的入口和指南。但是,这些通用性搜索引擎也存在着一定的局限性,如:
(1) 不同领域、不同背景的用户往往具有不同的检索目的和需求,通用搜索引擎所返回的结果包含大量用户不关心的网页。
(2) 通用搜索引擎的目标是尽可能大的网络覆盖率,有限的搜索引擎服务器资源与无限的网络数据资源之间的矛盾将进一步加深。
(3) 万维网数据形式的丰富和网络技术的不断发展,棱数据库、音频/视频多媒体等不同数据大量出现,通用搜索引擎往往对这些信息含量密集且具有一定结构的数据无能为力,不能很好地发现和获取。
(4) 通用搜索引擎大多提供基于关键字的检索,难以支持根据语义信息提出的查询。
为了解决上述问题,定向抓取相关网页资源的聚焦爬虫应运而生。聚焦爬虫是一个自动下载网页的程序,它根据既定的抓取目标,有选择的访问万维网上的网页与相关的链接,获取所需要的信息。与通用爬虫(generalpurpose web crawler)不同,聚焦爬虫并不追求大的覆盖,而将目标定为抓取与某一特定主题内容相关的网页,为面向主题的用户查询准备数据资源。
1 聚焦爬虫工作原理及关键技术概述
网络爬虫是一个自动提取网页的程序,它为搜索引擎从万维网上下载网页,是搜索引擎的重要组成。传统爬虫从一个或若干初始网页的URL开始,获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新的URL放入队列,直到满足系统的一定停止条件,如图1(a)流程图所示。聚焦爬虫的工作流程较为复杂,需要根据一定的网页分析算法过滤与主题无关的链接,保留有用的链接并将其放入等待抓取的URL队列。然后,它将根据一定的搜索策略从队列中选择下一步要抓取的网页URL,并重复上述过程,直到达到系统的某一条件时停止,如图1(b)所示。另外,所有被爬虫抓取的网页将会被系统存贮,进行一定的分析、过滤,并建立索引,以便之后的查询和检索;对于聚焦爬虫来说,这一过程所得到的分析结果还可能对以后的抓取过程给出反馈和指导。
相对于通用网络爬虫,聚焦爬虫还需要解决三个主要问题:
(1) 对抓取目标的描述或定义;
(2) 对网页%B
参考资料:
网络爬虫是什么意思
网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动的抓取万维网信息的程序或者脚本。
什么叫做Web爬虫
[离散数学是当代数学的一个重要分支,也是计算机科学的数学基础。它包括数理逻辑、 论、图论和近世代数四个分支。数理逻辑基于布尔运算,我们已经介绍过了。这里我们介绍图论和互联网自动下载工具网络爬虫 (Web Crawlers) 之间的关系。顺便提一句,我们用 Google Trends 来搜索一下“离散数学”这个词,可以发现不少有趣的现象。比如,武汉、哈尔滨、合肥和长沙市对这一数学题目最有兴趣的城市。]
我们上回谈到了如何建立搜索引擎的索引,那么如何自动下载互联网所有的网页呢,它要用到图论中的遍历(Traverse) 算法。
图论的起源可追溯到大数学家欧拉(Leonhard Euler)。1736 年欧拉来到德国的哥尼斯堡(Konig erg,大哲学家康德的故乡,现在是俄罗斯的加里宁格勒),发现当地市民们有一项消遣活动,就是试图将下图中的每座桥恰好走过一遍并回到原出发点,从来没有人成功过。欧拉证明了这件事是不可能的,并写了一篇论文,一般认为这是图论的开始。
图论中所讨论的的图由一些节点和连接这些节点的弧组成。如果我们把中国的城市当成节点,连接城市的国道当成弧,那么全国的公路干线网就是图论中所说的图。关于图的算法有很多,但最重要的是图的遍历算法,也就是如何通过弧访问图的各个节点。以中国公路网为例,我们从北京出发,看一看北京和哪些城市直接相连,比如说和天津、济南、石家庄、南京、沈阳、大同直接相连。我们可以依次访问这些城市,然后我们看看都有哪些城市和这些已经访问过的城市相连,比如说北戴河、秦皇岛与天津相连,青岛、烟台和济南相连,太原、郑州和石家庄相连等等,我们再一次访问北戴河这些城市,直到中国所有的城市都访问过一遍为止。这种图的遍历算法称为“广度优先算法”(BFS),因为它先要尽可能广地访问每个节点所直接连接的其他节点。另外还有一种策略是从北京出发,随便找到下一个要访问的城市,比如是济南,然后从济南出发到下一个城市,比如说南京,再访问从南京出发的城市,一直走到头。然后再往回找,看看中间是否有尚未访问的城市。这种方法叫“深度优先算法”(DFS),因为它是一条路走到黑。这两种方法都可以保证访问到全部的城市。当然,不论采用哪种方法,我们都应该用一个小本本,记录已经访问过的城市,以防同一个城市访问多次或者漏掉哪个城市。
现在我们看看图论的遍历算法和搜索引擎的关系。互联网其实就是一张大图,我们可以把每一个网页当作一个节点,把那些超链接(Hyperlinks)当作连接网页的弧。很多读者可能已经注意到,网页中那些蓝色的、带有下划线的文字背后其实藏着对应的网址,当你点下去的的时候,浏览器是通过这些隐含的网址转到相应的网页中的。这些隐含在文字背后的网址称为“超链接”。有了超链接,我们可以从任何一个网页出发,用图的遍历算法,自动地访问到每一个网页并把它们存起来。完成这个功能的程序叫做网络爬虫,或者在一些文献中称为"机器人" (Robot)。世界上第一个网络爬虫是由麻省理工学院 (MIT)的学生马休格雷(Matthew Gray)在 1993 年写成的。他给他的程序起了个名字叫“互联网漫游者”(" wanderer")。以后的网络爬虫越写越复杂,但原理是一样的。
我们来看看网络爬虫如何下载整个互联网。假定我们从一家门户网站的首页出发,先下载这个网页,然后通过分析这个网页,可以找到藏在它里面的所有超链接,也就等于知道了这家门户网站首页所直接连接的全部网页,诸如雅虎邮件、雅虎财经、雅虎新闻等
网络爬虫是什么,有很大的作用吗
网络爬虫又被称为网页蜘蛛,聚焦爬虫,网络机器人,在FOAF社区中间,更经常的称为网页追逐者,是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。
网络爬虫是一个自动提取网页的程序,它为搜索引擎从万维网上下载网页,是搜索引擎的重要组成搐传统爬虫从一个或若干初始网页的URL开始,获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新的URL放入队列,直到满足系统的一定停止条件。聚焦爬虫的工作流程较为复杂,需要根据一定的网页分析算法过滤与主题无关的链接,保留有用的链接并将其放入等待抓取的URL队列。然后,它将根据一定的搜索策略从队列中选择下一步要抓取的网页URL,并重复上述过程,直到达到系统的某一条件时停止。另外,所有被爬虫抓取的网页将会被系统存贮,进行一定的分析、过滤,并建立索引,以便之后的查询和检索;对于聚焦爬虫来说,这一过程所得到的分析结果还可能对以后的抓取过程给出反馈和指导。
什么是网络爬虫,网络爬虫的职能是什么
自动检索工具(automatic indexer),或者(在FOAF软件概念中)网络疾走(WEB scutter),是一种“自动化浏览网络”的程序,或者说是一种网络机器人。它们被广泛用于互联网搜索引擎或其他类似网站,以获取或更新这些网站的内容和检索方式。它们可以自动采集所有其能够访问到的页面内容,以供搜索引擎做进一步处理(分检整理下载的页面),而使得用户能更快的检索到他们需要的信息。
参考自知乎网友回答
什么是网络爬虫,简单点说,网上的看不懂
网络爬虫,你可以把互联网理解为一张由代码编制成大的网,网上有很多爬虫,在上面行走,但每个爬虫都有个家,每天外出,但时间就会回家,等于把蒐集到的数据带回数据库
网络爬虫 这个是什么意思
百度蜘蛛,这只是比喻他们在网上爬行。他们主要是负责收录网站,以便用户将来能搜索到更多更好的网站
爬虫是什么意思?
网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。
注意:另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。
什么是网络爬虫以及怎么做它?
网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动的抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁,自动索引,模拟程序或者蠕虫。
看看百科 上边挺详细的
既然能写出这么多,说明还是会动手的。想快速的实现的话,就先在网上看一下简单的例子,照着例子自己动手写一遍。理解函数怎么用,做什么!然后模仿自己这一个,差不多了,就开始举一反三来写你想实现的。
不知道你用什么编程语言,我用的java的给你参考一下。用到了apache的httpComponents下的包,你也可以用java自带的URLConnection。
//根据网址url和网页编码获取网页源代码private String getHTML(String url,String encode) {
HttpPost httpPost = new HttpPost(url);
CloseableHttpResponse response = null;
StringBuilder sb = new StringBuilder();
try {
CloseableHttpClient httpClient = HttpClientscreateDefault();
response = httpClientexecute(httpPost);
HttpEntity entity = responsegetEntity();
InputStream is = entitygetContent();
BufferedReader br = new BufferedReader(new InputStreamReader(is, encode));
String line;
while ((line = brreadLine()) != null) {
sbappend(line);
}
EntityUtilsconsume(entity);
responseclose();
} catch (IllegalStateException | IOException e) {
eprintStackTrace();
}
return sbtoString();
}
至于正则表达式匹配,这个要根据你匹配的内容来定义正则表达式
//定义正则表达式Pattern pattern=Patterncompile("");
//需要匹配的字符串
String s="";
Matcher matcher=patternmatcher(s);
//每次查找到匹配的字符串时,输出匹配结果
while (matcherfind()){
Systemoutprintln(matchergroup());
}
学习Python的三种境界
前言
王国维在《人间词话》中将读书分为了三种境界:“古今之成大事业、大学问者,必经过三种之境界:‘昨夜西风凋碧树,独上高楼,望尽天涯路’。此第一境也。‘衣带渐宽终不悔,为伊消得人憔悴。’此第二境也。‘众里寻他千百度,蓦然回首,那人却在灯火阑珊处’。此第三境也。我从入门Python到现在也没有多少时间,所以写如此大的一个题目必定会引发各种批判,当然我没有想造一个大新闻,只是想根据自己的学习历程做一个简单的总结,同时将这三个阶段对应的一些好的书籍简单介绍介绍。
正文
Python的用途十分广泛,不同的程序员将其用于不用的领域,不同的程序员将自己的代码打包成库,供其他程序员使用,从而少造轮子,各种库的使用,加之Python本身的灵活性、易读性,易写性,使用的人越来越多,tiobe统计编程语言的使用率如下:Python在一年之间使用排行榜中上升了3名,而且各大公司在招聘员工的时候如果能掌握Python,肯定是一个加分项,因为Python在文本处理,小程序的写作方面具有太强的优势,前段时间一个朋友让帮忙改下他们公司logo的颜色,第一个想到的就是用Python,女票让我帮她预处理大数据,第一个想到的仍然是Python等等,当然并没有说其他语言不好,也不是为了讨论哪种语言更好,只是Python确实是一门会让人幸福的语言,下面粗浅的说说我对Python学习过程中的境界划分以及推荐书籍。
第一个阶段:初级,掌握Python的语法和一些常用库的使用这里首先推荐在腾讯官方课程平台上进行直播学习,有号就能无偿一直学,每天晚上都是高清直播(企鹅球球:1129中间是834最后加上这个903连在一起就可以了),除此之外基于python27在网上的书籍适合于重头开始一直读完,作为一个开发人员,除了基本的语法,这本书里面提到了一些其他的常用的库,看了廖老师写的很多东西,感觉他的思路,以及写博客写书的高度,概括性,原理性都十分好,这本书读完之后,相信就可以动手写很多东西了,可以尽情的玩转Python解释器了。
另外还有一本书《Python参考手册》,这本书也十分的有用,关于Python的方方面面基本都囊括在内,可以作为一本Python字典来查询使用方法,十分好用。
掌握一门语言最好的方法就是用它,所以我觉得边学语法边刷Leetcode是掌握Python最快的方式之一。
很多只需要将Python作为脚本或者就是写一些小程序处理处理文本的话,到这一个阶段就足够了,这个阶段已经可以帮我们完成很多很多的事情了。但是如果是一个专业学习Python的,恐怕还需要努力的升级:首先,国内的大多数人都是学习了其他语言(C,C,Java等)之后来学习Python的,所以Python和这些语言的不同,也就是pythonic的东西需要一些时间去学习了解和掌握;另外,对于自己领域的领域的库构架的掌握也需要很长的时间去掌握;最后,如果想独立完成一个Python的项目,项目的布局,发布,开源等都是需要考虑的问题。
第二个阶段:中级,掌握自己特定领域的库,掌握pythonic写法,非常熟悉Python的特性
推荐的第一本书是《编写高质量代码_改善python程序的91个建议》,这本书大概的提了下Python工程的文件布局,更多的总结了如何写出pythonic的代码,另外,也介绍了一些常用的库。
要想深入的了解Python,有的时候看看Python的源码也是很重要的,自己通过读懂源码,来彻底的了解Python的核心机制,这里推荐《Python源码剖析——深度探索动态语言核心技术》,这本书并没有看完,只是在需要深入了解Python某个功能或者数据结构的时候看看相关章节,也觉得受益匪浅。
自己领域的书籍和资料也肯定很多,比如web开发的构架都有很多,只有了解熟悉了所有构架,在选择的时候才能衡量利弊,然后深入掌握某些构架。
这个阶段过后,可以写出pythonic代码,可以通过PEP8的检查,可以为开源社区做贡献了,可以将一个Python文件写的十分好,但是如果要用Python开发一个大型项目,还是有很多东西需要掌握的,比如项目的文档,项目的发布,下载,项目性能和案例等等。
第三个阶段:高级,从整个工程项目着眼,考虑document,性能优化等
目前只看了一本书《thehackerguidetopython》,看的是英文版的,这本书对项目的布局,文档,性能,发布等做了很多详细的介绍,我觉得写的还是很不错,只不过本人还需要再读几遍。
对于大多数人来说,很难有机会从头开始一个有意义的大型工程项目,所以自己可以用Python实现一些简单的功能,简单的项目,这个灵感可以去知乎或者quora搜索,很多前辈都分享了自己的经验。
从大局入手,规划好项目的布局,设定好相应的文档说明,提供工程下载安装的方法,带几个demo,每个类,每个函数,每行代码都反复推敲,写出pythonic的程序,相信这时候Python于我们便是信手拈来了!
总结
本文只是我认为的学习Python的三种境界,以我粗浅之眼光,肯定有太多太多的不足,而且自己也就是一个介于初级和高级Python程序员的水平,写这个文章,也算是给自己设立的一个目标吧。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)