摘要:接上回第二部分,编写爬虫。进入微信嵌套选择图片和上传图片接口,实现一键上传图片,遇到问题看吧,我现在已经可以通过爬虫获取的提问标题了。微信故意省略想做小偷站的,看到这里基本上就能搞出来了。下一篇,采集入库
上回,我装了环境
也就是一对乱七八糟的东西
装了pip,用pip装了virtualenv,建立了一个virtualenv,在这个virtualenv里面,装了Django,创建了一个Django项目,在这个Django项目里面创建了一个叫做web的阿皮皮。
接上回~
第二部分,编写爬虫。工欲善其事,必先利其器。
bashapt-get install vim # 接上回,我们在screen里面是root身份哦~
当然了,现在我要想一个采集的目标,为了方便,我就选择segmentfault吧,这网站写博客不错,就是在海外上传图片有点慢。
这个爬虫,就像我访问一样,要分步骤来。 我先看到segmentfault首页,然后发现里面有很多tags,每个tags下面,才是一个一个的问题的内容。
所以,爬虫也要分为这几个步骤来写。 但是我要反着写,先写内容爬虫,再写分类爬虫, 因为我想。
2.1 编写内容爬虫首先,给爬虫建立个目录,在项目里面和app同级,然后把这个目录变成一个python的package
bashmkdir ~/python_spider/sfspider touch ~/python_spider/sfspider/__init__.py
以后,这个目录就叫爬虫包了
在爬虫包里面建立一个spider.py用来装我的爬虫们
bashvim ~/python_spider/sfspider/spider.py
一个基本的爬虫,只需要下面几行代码:
(代码下面会提供)
然后呢,就可以玩玩我们的“爬虫”了。
进入python shell
python>>> from sfspider import spider >>> s = spider.SegmentfaultQuestionSpider("1010000002542775") >>> s.url >>> "http://segmentfault.com/q/1010000002542775" >>> print s.dom("h1#questionTitle").text() >>> 微信JS—SDK嵌套选择图片和上传图片接口,实现一键上传图片,遇到问题
看吧,我现在已经可以通过爬虫获取segmentfault的提问标题了。下一步,为了简化代码,我把标题,回答等等的属性都写为这个蜘蛛的属性。代码如下
python# -*- coding: utf-8 -*- import requests # requests作为我们的html客户端 from pyquery import PyQuery as Pq # pyquery来操作dom class SegmentfaultQuestionSpider(object): def __init__(self, segmentfault_id): # 参数为在segmentfault上的id self.url = "http://segmentfault.com/q/{0}".format(segmentfault_id) self._dom = None # 弄个这个来缓存获取到的html内容,一个蜘蛛应该之访问一次 @property def dom(self): # 获取html内容 if not self._dom: document = requests.get(self.url) document.encoding = "utf-8" self._dom = Pq(document.text) return self._dom @property def title(self): # 让方法可以通过s.title的方式访问 可以少打对括号 return self.dom("h1#questionTitle").text() # 关于选择器可以参考css selector或者jquery selector, 它们在pyquery下几乎都可以使用 @property def content(self): return self.dom(".question.fmt").html() # 直接获取html 胆子就是大 以后再来过滤 @property def answers(self): return list(answer.html() for answer in self.dom(".answer.fmt").items()) # 记住,Pq实例的items方法是很有用的 @property def tags(self): return self.dom("ul.taglist--inline > li").text().split() # 获取tags,这里直接用text方法,再切分就行了。一般只要是文字内容,而且文字内容自己没有空格,逗号等,都可以这样弄,省事。
然后,再把玩一下升级后的蜘蛛。
python>>> from sfspider import spider >>> s = spider.SegmentfaultQuestionSpider("1010000002542775") >>> print s.title >>> 微信JS—SDK嵌套选择图片和上传图片接口,实现一键上传图片,遇到问题 >>> print s.content >>> # [故意省略] # >>> for answer in s.answers print answer >>> # [故意省略] # >>> print "/".join(s.tags) >>> 微信js-sdk/python/微信开发/javascript
OK,现在我的蜘蛛玩起来更方便了。
2.2 编写分类爬虫下面,我要写一个抓取标签页面的问题的爬虫。
代码如下, 注意下面的代码是添加在已有代码下面的, 和之前的最后一行之间 要有两个空行
pythonclass SegmentfaultTagSpider(object): def __init__(self, tag_name, page=1): self.url = "http://segmentfault.com/t/%s?type=newest&page=%s" % (tag_name, page) self.tag_name = tag_name self.page = page self._dom = None @property def dom(self): if not self._dom: document = requests.get(self.url) document.encoding = "utf-8" self._dom = Pq(document.text) self._dom.make_links_absolute(base_url="http://segmentfault.com/") # 相对链接变成绝对链接 爽 return self._dom @property def questions(self): return [question.attr("href") for question in self.dom("h2.title > a").items()] @property def has_next_page(self): # 看看还有没有下一页,这个有必要 return bool(self.dom("ul.pagination > li.next")) # 看看有木有下一页 def next_page(self): # 把这个蜘蛛杀了, 产生一个新的蜘蛛 抓取下一页。 由于这个本来就是个动词,所以就不加@property了 if self.has_next_page: self.__init__(tag_name=self.tag_name ,page=self.page+1) else: return None
现在可以两个蜘蛛一起把玩了,就不贴出详细把玩过程了。。。
python>>> from sfspider import spider >>> s = spider.SegmentfaultTagSpider("微信") >>> question1 = s.questions[0] >>> question_spider = spider.SegmentfaultQuestionSpider(question1.split("/")[-1]) >>> # [故意省略] #
想做小偷站的,看到这里基本上就能搞出来了。 套个模板 加一个简单的脚本来接受和返回请求就行了。
未完待续。
下一篇,采集入库!
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/37502.html
摘要:从今天起,我将在这里更新一个系列的简单爬虫到建立网站的实践手记。内容将会从最简单的开始,环境搭建,基本爬虫,入库,用建立可供用户访问的网站,网站部署。第一部分,买,装环境。我们爬虫站点的所有文件都放在里面。 从今天起,我将在这里更新一个系列的python简单爬虫到建立网站的实践手记。 内容将会从最简单的开始,环境搭建,基本爬虫,入库,用Django建立可供用户访问的网站,网站部署。 ...
摘要:进入正题第三部分,采集入库。内容如下加上这个可以记住问题在的位置,方便以后更新或者其他操作都很直白,关于各个可以看看的文档。代码如下添加方法采集当前分页正在抓取分页这个地方写得很笨,之前该在加上这个属性。 上回,我已经大概把爬虫写出来了。 我写了一个内容爬虫,一个爬取tag里面内容链接的爬虫 其实还差一个,就是收集一共有哪些tag的爬虫。但是这里先不说这个问题,因为我上次忘了 这次又不...
摘要:大概个月前已新手的身份写了几篇入门的文章爬虫建站入门手记从零开始建立采集站点结果弄到一半就弃坑了。前两次的视频存档编写爬虫入库由于很久没有写这些东西了,视频里面有一半的时间在和上找资料。。。下面是建立的一个微信群的二维码 大概20个月前已新手的身份写了几篇入门的文章:Python爬虫建站入门手记——从零开始建立采集站点 结果弄到一半就弃坑了。 该填的坑是要填的,于是我最近开始在 liv...
摘要:分布式爬虫框架详解随着互联网技术的发展与应用的普及,网络作为信息的载体,已经成为社会大众参与社会生活的一种重要信息渠道。下载器中间件位于引擎和下载器之间的框架,主要是处理引擎与下载器之间的请求及响应。 scrapy-redis分布式爬虫框架详解 随着互联网技术的发展与应用的普及,网络作为信息的载体,已经成为社会大众参与社会生活的一种重要信息渠道。由于互联网是开放的,每个人都可以在网络上...
阅读 2222·2021-09-24 10:31
阅读 3874·2021-09-22 15:16
阅读 3394·2021-09-22 10:02
阅读 1009·2021-09-22 10:02
阅读 1821·2021-09-08 09:36
阅读 1973·2019-08-30 14:18
阅读 607·2019-08-30 10:51
阅读 1862·2019-08-29 11:08