继续上一篇文章的内容,上一篇文章中,将爬虫调度器已经写好了,调度器是整个爬虫程序的"大脑",也可以称之为指挥中心.而现在,我们要做的就是去将调度器中用到的其他组件写好.首先是url管理器,它既然作为管理器,那么它一定要区分待爬取的url和已经爬取的url,否则会重复爬取.这里教程用的是set集合,将两个url暂时存放到集合中,也就是内存中,毕竟比较爬取的数据比较少,当然也可以存放到别的地方,比如缓存或者关系型数据库中. 从图中可以看出,一共出现5次: 第一次是调度器初始化函数中,创建这…
最近刚接触python,找点小任务来练练手,希望自己在实践中不断的锻炼自己解决问题的能力.这个小爬虫来自慕课网的一门课程,我在这里记录的是自己学习的过程中遇到的问题和解决方法以及爬虫之外的思考. 这次的小任务就是写一个小爬虫.为啥选这个来练手呢,最最重要的原因就是大数据太热了,就像武汉的现在的天气.数据之于"大数据",就好比武器之于战士,砖瓦之于高楼.没有了数据,"大数据"就是空中阁楼,根本没法落地,应用于实际.数据怎么来呢?两种途径,一个是自取,一个他取.自取不必…
继续上一篇文章的内容,上一篇文章中已经将url管理器和下载器写好了.接下来就是url解析器,总的来说这个模块是几个模块中比较难的.因为通过下载器下载完页面之后,我们虽然得到了页面,但是这并不是我们想要的结果.而且由于页面的代码很多,我们很难去里面找到自己想要的数据.所幸,我们下载的是html页面,它是一种由多个多层次的节点组成的树型结构的文本文件.所以,相较于txt文件,我们更加容易定位到我们要找的数据块.现在我们要做的就是去原页面去分析一下,我们想要的数据到底在哪. 打开百度百科pyton词条…
本文是博主原创随笔,转载时请注明出处Maple2cat|Python爬虫学习:三.爬虫的基本操作与流程 一般我们使用Python爬虫都是希望实现一套完整的功能,如下: 1.爬虫目标数据.信息: 2.将数据或信息存入数据库中: 3.数据展示,即在Web端进行显示,并有自己的分析说明. 这次我先介绍第一个功能中所需要实现的基本操作: 爬虫的基本操作:      表示必须步骤           表示可选步骤 导入爬虫所需要的库(如:urllib.urllib2.BeautifulSoup.Scrap…
这个爬虫集训课第三章的作业讲得是Scrapy 课程主要是使用Scrapy + Redis实现分布式爬虫 惯例贴一下作业: Python爬虫可以使用Requests库来进行简单爬虫的编写,但是Requests的性能很差,一个请求耗时在2秒左右,毫无性能. 当然也可以使用gevent和asyncio来实现协程提升性能.但是要实现分布式爬虫的话,还是要用Scrapy, Scrapy内部是使用的 twisted实现的异步功能. 贴下作业目录. 下边记录下作业完成中遇到的问题 作业实现过程:1.windo…
Cookies: 以抓取https://www.yaozh.com/为例 Test1(不使用cookies): 代码: import urllib.request # 1.添加URL url = "https://www.yaozh.com/" # 2.添加请求头 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, l…
写爬虫之前,首先要明确爬取的数据.然后,思考从哪些地方可以获取这些数据.下面以一个实际案例来说明,怎么寻找一个好的爬虫策略.(代码仅供学习交流,切勿用作商业或其他有害行为) 1).方式一:直接爬取网站 目标网址:http://chanyouji.com/ 注意:这个网站会拦截IP,访问次数过多,IP会被封,所以,上节的IP代理就用到了. a).打开网页,可以看到这是一个游记类的网站,里面有很多人分享的游记.那我们就爬这些游记.说不定以后有时间出去玩的时候可以用到. b).点开其中一篇游记,可以看…
XML和XPATH 用正则处理HTML文档很麻烦,我们可以先将 HTML文件 转换成 XML文档,然后用 XPath 查找 HTML 节点或元素. XML 指可扩展标记语言(EXtensible Markup Language) XML 是一种标记语言,很类似 HTML XML 的设计宗旨是传输数据,而非显示数据 XML 的标签需要我们自行定义. XML 被设计为具有自我描述性. XML 是 W3C 的推荐标准 <?xml version="1.0" encoding="…
一些网站会有相应的反爬虫措施,例如很多网站会检测某一段时间某个IP的访问次数,如果访问频率太快以至于看起来不像正常访客,它可能就会会禁止这个IP的访问.所以我们需要设置一些代理服务器,每隔一段时间换一个代理,就算IP被禁止,依然可以换个IP继续爬取. 在Python中,可以使用urllib2中的ProxyHandler来设置使用代理服务器,下面通过代码说明如何来使用代理: import urllib2 # 构建了两个代理Handler,一个有代理IP,一个没有代理IP httpproxy_han…
Handler处理器 和 自定义Opener opener是 urllib2.OpenerDirector 的实例,其中urlopen是模块默认构建的opener. 但是基本的urlopen()方法不支持代理.cookie等其他的HTTP/HTTPS高级功能.如果要支持这些功能,可以使用相关的 Handler处理器来创建特定功能的处理器对象,然后通过 urllib2.build_opener()方法使用这些处理器对象,创建自定义opener对象,最后 使用自定义的opener对象,调用open(…