Python爬虫实战入门:从基础到分布式爬取

创始人
2024-12-15 01:35:49
0 次浏览
0 评论

如何入门Python爬虫

“开始”是一个很好的激励因素,但可能会很慢。
如果你手头或心里有一个项目,你实际上会朝着一个目标努力,而不是像模块一样慢慢学习。
另外,如果知识系统中的每个知识点都是图中的一个点,依赖关系是一条边,那么该图就不可能是有向无环图。
因为学习A的经验可以帮助你学习B。
因此,你不需要学习如何“开始”,因为这样的“开始”点并不存在!你需要学习的是如何做更大的事情。
在这个过程中,你会很快学到你需要学的东西。
当然,你可能会说你需要先了解python,否则你怎么能学python来做爬虫呢?但实际上,你绝对可以在制作这个爬虫的同时学习Python:D。
看前面的回答讲了很多“技巧”——用什么软件,如何爬行,那我就来说说“我”和“技巧”——爬虫是如何工作的,以及如何用python实现的。
我们先长话短说,总结一下。
你需要学习:爬虫基础知识、基础http爬虫、ScrapyBloomFilter:Bloom如果需要爬取大型网站,则需要学习分布式爬虫概念。
这并不神秘,你只需要学习如何维护一个分布式队列,让集群中的所有机器都能高效共享。
最简单的实现是python-rq:https://github.com/nvie/rqrq和Scrapy:darkrho/scrapy-redis·GitHub的组合,处理接下来的、站点提取(grangier/python-goose·GitHub)、托管(Mongodb)这是一个小故事。
来说说写一句话爬下整个豆瓣的经历。
1)首先,你需要了解爬虫是如何工作的。
想象一下您是一只蜘蛛,现在您被发布在互联网“网络”上。
然后你需要阅读所有网站。
该怎么办?没问题,你可以从某个地方开始,比如人民日报的首页。
这些称为初始页,用$表示。
在《人民日报》首页,您会看到各种指向该页面的链接。
于是你高高兴兴地爬到了“国内新闻”页面。
太棒了,您已经浏览了两页(主页和本地新闻)!不管爬取的页面是如何处理的,试想一下,您将整个页面复制到HTML并放在您身上。
突然你发现国内的一个新闻网站上有一个返回“首页”的链接。
作为一只聪明的蜘蛛,你一定知道你不需要爬回来,因为你已经看到了。
因此,你需要开动脑筋,保存你浏览过的页面的地址。
这样,每次您看到可能需要抓取的新链接时,您首先检查您是否访问过该地址。
重要提示:本段有问题,请暂时跳过】好的,现在我们已经接近解决权重判断问题的最快方法了。
另一个问题是——你只有一台机器。
不管你的带宽有多大,只要你的电脑的网站加载速度是瓶颈,你就只能提高这个速度。
如果一台机器不够-使用多台机器!当然,我们假设每台机器都已达到最大性能——使用多线程(对于Python,多处理)。
3)在集群采集豆瓣数据的时候,我总共用了100多台机器全天候运行。
想象一下,如果你只使用一台机器,你必须运行它100个月......那么,假设你现在有100台机器可用,如何使用python实现分析数据收集算法?我们将这100台机器中的99台称为计算能力较小的辅助服务器,其余较大的机器称为主机。
然后再看上面代码中的url_queue,如果我们能把这个队列放在这个master上,那么所有的slave都可以​​和master通信。
通过网络掌握。
每当从站完成网页下载时,它就会向主站请求新的网页来收集数据。
Slave每次捕获一个新网站时,都会将该网站上的所有链接发送到Master的队列中。
同样,Bloomfilter也放置在master上,不过这次master只向slave发送未访问过的URL。
BloomFilter被放置在master的内存中,访问的URL被放置在master上运行的Redis中,从而确保所有操作都是O(1)。
(至少摊销是O(1)。
Redis的访问效率参见:LINSERT-Redis)我们看一下Python中如何实现:在每个Slave上安装Scrapy,那么每个Slave都将成为一个能够收集数据的辅助机器。
在master上安装Redis和rq以用作分发队列。
然后编写代码:Python#slave.pycurrent_url=request_from_master()to_send=[]fornext_urlinextract_urls(current_url):to_send.append(next_url)store(current_url);send_to_master(to_send)#master.pydistributed_queue=DistributiontedQueue()bf=BloomFilter()initial_pages="www.renmingribao.com"while(True):ifrequest=='GET':ifdistributed_queue.size()>0:send(distributed_queue.get())else:breakelifrequest=='POST':bf.put(request.url)#slave.pycurrent_url=request_from_master()to_send=[]fornext_urlinextract_urls(current_url):to_send.append(next_url)store(current_url);send_to_master(to_send)#master.pydistributed_queue=DistributedQueue()bf=BloomFilter()initial_pages="www.renmingribao.com"while(True):ifrequest=='GET':ifdistributed_queue.size()>0:send(distributed_queue.get())else:breakelifrequest=='POST':bf.put(request.url)好吧,其实你可以想想,有人已经写好了你需要的东西:darkrho/scrapy-redis·GitHub4)勘探和后处理尽管上面使用了很多“简单”的方法,但要在商业规模上部署爬虫实际上并不容易。
使用上面的代码可以爬取整个网站,没有太大问题。
但如果您需要额外的跟踪处理,例如比如有效的存储(如何组织数据库)和有效的重复判断(这里指的是网站重复判断,我们不想同时抓取《人民日报》和《大民日报》,这是抄袭的)有效地提取信息(比如如何提取网站全部信息提取地址,“朝阳区奋进路中华路”)。
搜索引擎通常不需要存储所有信息,例如为什么我保存照片...及时更新(预测该网站出现的频率)。
已更新)。
正如你所想,这里的每一点都可以被很多研究人员研究十几年。
然而,“路还长,上下求索”。

如何入门Python爬虫

对爬虫的几个基本要求:1、Python中没有使用Repiurllib,但是如果你还没用过,需要学习一下。
更好的功能包括第三方库,使应用程序更加用户友好和成熟。
剥离主要是拉动页面的背面。
如果深入的话,你会发现你要满足不同的Web需求,比如身份验证、不同的文件格式、加密流程、不同的国外URL合规流程、频繁的爬行问题、cookie跟踪问题、多线路多进程系列爬取、多节点爬取、爬取调度、资源压缩等问题所以第一步就是把网页拉回来,慢慢你就会发现各种需要优化的问题。
2.通常会使用特定的策略来直接分析捕获的数据。
我个人认为更好的结构应该是划分分析和捕获,这样可以将每个页面上较松散的问题与另一个页面上可能存在的问题分开。
如何存储文件系统、SQL或NOSQL数据库以及内存数据库是本文的重点。
您可以选择保存启动系统文件并按照特定规则命名。
3.分析:分析登陆页面上的文本,无论是提取链接还是提取文本。
最后还要看需求,但是要做的就是分析连接。
你可以使用最快、最优化的方式,比如正则表达式。
将分析的结果应用到其他链接上:)4.展示如果你做了一堆事情,都没有输出,那怎么展示价值呢。
所以找到好的展示成员来炫耀自己的肌肉也是关键。
如果您编写爬行来构建一个网站,或者如果您想分析某人的数据,请不要忘记建议此链接到其他更好的结果。
热门文章
1
Python中的format()方法:字... formatformat在python中的含义2222.22E+00Format...

2
Python编程入门:全面解析Pytho... python的基本语法基本的Python语法如下:1.变量的定义。在编程语言中,...

3
Python字符串大小写转换方法全解析 python中字母的大小写转换怎么实现?在Python中,大小写转换由内置函数处...

4
Python字典:轻松获取最小值键与计算... python在一个字典里,返回值最小元素对应的键,救解在Python字典中,如果...

5
Python字符串去重空格:strip(... Python去除字符串中空格(删除指定字符)的3种方法在Python编程中,处理...

6
Python数组元素数量计算技巧分享 Python输出数组有多少个元素?简介:在本文中,首席CTO笔记将向您介绍Pyt...

7
简述python中pass的作用 pass语句的作用在许多编程语言中,包括Python;PASS语句用于在代码块中...

8
Python def 关键字详解:函数定... def是什么意思编程?戴夫是什么意思?def是Python中的函数定义关键字,用...

9
python不区分大小写的方法 Python字符串不区分大小写在Python中,字符串操作默认区分大小写。但有时...

10
Python字典操作全解析:添加、修改、... Pythondict字典基本操作(包括添加、修改、删除键...