放养的小爬虫--豆瓣电影入门级爬虫(mongodb使用教程~)

笔者声明:只用于学习交流,不用于其他途径。源代码已上传github。githu地址:https://github.com/Erma-Wang/Spider

笔者声明:只用于学习交流,不用于其他途径。源代码已上传github。githu地址:https://github.com/Erma-Wang/Spider

笔者声明:只用于学习交流,不用于其他途径。源代码已上传github。githu地址:https://github.com/Erma-Wang/Spider

重要的事情说三遍~~~!!!只用于学习交流,私自用于其他途径,后果自负!!!

github源代码地址https://github.com/Erma-Wang/Spider(注意,本仓库还有其他的小爬虫,本文章讲解的是DouBanSpider···),别忘了给个star哦 ! @、@


开篇之前闲聊几句

笔者是iOS开发从业者,但是我相信很多小伙伴也和我一样,并不是Python开发者,却对爬虫技术(scrapy)颇感兴趣儿之前写过一些iOS的博客,最近在写爬虫技术分享的博客的时候,发现很多小伙伴对爬虫技术比对iOS兴趣点来的大这时候,我就在想,为什么叻?

我认为爬虫技术基本原理就三点~下载数据~匹配数据~保存数据~,本来一件很简单的事儿,却有这么多的爬虫爱好者去研究去探索并且还诞生了伟大的框架scrapypyspider,但是个人认为其是一种工具。这么多的非python开发者对爬虫技术(scrapy、pyspider)感兴趣,我想是因为爬虫技术属于逆向工程人们一直以来对正向的思维,正向的发展,正向的软件开发等等一切事物运筹帷幄,却很少有人对一件事物,一件物品,一个软件,甚至一个网站开发出来后反向对到其制作过程,制作工序,制作原料作其推导古文说以古为镜,可以知兴替,我想,对一件已经制作出来的物品,推导其制作过程,比制作这件物品更来得有兴趣吧~


总结几点~

之前在上一篇博客中有些小伙伴给我了一些不错的idea~

  • 有读者建议我在之前的爬虫上加上代理,这点儿,笔者还是以不加代理的风格继续写爬虫,因为毕竟加上代理我会担心一些不好的小伙伴拿笔者写好的爬虫去做了不好的事儿,请谅解如有个人特殊需求,上github上自行fork修改
  • 之前的JDSpider具有时效性因为毕竟京东也不是傻子,规则会经常变更
  • 之前有效换提出能不能抓取AJAX的url,额对于这样高深的技术,超出笔者能力范围目前为止,唯一的办法就是抓包工具抓包,人工手动分析~
  • 有一些idea还在研究中,比如说爬取淘宝数据这个有难度,是真心有难度
  • 最后,笔者所写爬虫技术含量并不高,只是入门级别的爬虫,只用于爬虫爱好者交流分享摆了~适合于爬虫初学者,大多为scrapy。。。

开篇

笔者在之前的博客里写过京东的Spider,首先非常感谢小伙伴对我的支持在此,笔者写了一个入门级别的小爬虫,给一些想学scrapy但是还没有开始学习scrapy的小伙伴讲解一些scrapy的一些基础知识吧本文虽然对于scrapy来说完全算是入门级别,但是您应该具有一定的网页编程基础和网络基础知识。本文中主要讲解mongodb的基本使用,附带一个实战小爬虫~

还是一样,scrapy不做详细解释有疑问,找度娘

抓取目标url和目标数据item

目标url:https://movie.douban.com/top250

目标数据 item

标题:title = Field()

电影信息:movieInfo = Field()

评分:star = Field()

经典名言:quote = Field()

目标网站分析与思路分析(爬虫常规思路~)

先看看目标网站吧是的,网上很多用豆瓣做爬虫教程,因为比较好爬取吧笔者在这也用豆瓣爬虫来作为演示~

一、抓取li标签构建数组~

是的,和常规网站一样一个li标签代表一个小模块的整合思路先把每个li抓取出来放入一个数组中,这也是常规思路,先看关键代码吧

实例化选择器

selector = Selector(response)

抓取li标签构建Movies数组

Movies = selector.xpath('//div[@class="info"]')

二、遍历数组取出each~

for in循环取出~没啥说的

三、选择器匹配数据~

抓取数据~

title = eachMovie.xpath('div[@class="hd"]/a/span[@class="title"]/text()').extract()
movieInfo = eachMovie.xpath('div[@class="bd"]/p/text()').extract()
star = eachMovie.xpath('div[@class="bd"]/div[@class="star"]/span[@class="rating_num"]/text()').extract()
quote = eachMovie.xpath('div[@class="bd"]/p[@class="quote"]/span/text()').extract()

四、传值给item~

熟悉MVC的小伙伴在学习scrapy的时候都应该知道~item在这里就相当于MVC里面的Model。

item['title'] = title
item['movieInfo'] = ';'.join(movieInfo)
item['star'] = star
item['quote'] = quote

五、翻页~

抓取下一页href的url,递归调用Request

nextLink = selector.xpath('//span[@class="next"]/link/@href').extract()

if nextLink:

nextLink = nextLink[0]

print(nextLink)

yield Request(self.url + nextLink,callback=self.parse)


Ok数据抓取下来了,现在考虑一个问题保存~

本博客主要讲解的是mongodb和scrapy配合使用下面看看代码怎么写的吧

首先在setting里面作配置~

设置传输的管道为什么是管道叻笔者英语不咋滴喜欢这么翻译pipeline

ITEM_PIPELINES = ['DouBanSpider.pipelines.DoubanspiderPipeline']

设置mongodb地址~

MONGODB_HOST = '127.0.0.1'

设置端口号也就是port默认为27017~

MONGODB_PORT = 27017

设置数据库名字~

MONGODB_DBNAME = 'DouBan'

设置存放本次数据的表名~

MONGODB_DOCNAME = 'DouBanDy'


OK配置好setting后再配置Pipeline吧

我们借助pymongo这个模块来配置Pipeline吧导入pymongo模块后

只做关键两步讲解~

链接数据库~

client = pymongo.MongoClient(host=host,port=port)

指向数据库里面要存放数据的表名~

tdb = client[dbName]

向指定的表里添加数据两句关键代码

self.post = tdb[settings['MONGODB_DOCNAME']]

self.post.insert(dyInfo)


好吧看看效果吧

爬虫启动~

开始爬取~

再看看数据库~


最后对mongodb的使用做个简单的介绍~

mongodb属于非关系型数据库是一个基于分布式文件存储的数据库。由C++语言编写。。。好吧这些废话我不在这里说了自己百度百科吧我写博客写你能在其他地方都能找到的理论性的知识简单的说说使用mongodb的安装和使用吧

mongodb的安装~

网上有一大把一大把mongodb的安装教程自己搜索去吧笔者是通过brew安装的mongodb,因为笔者使用的Mac,尝试过很多种安装mongodb的方法都未成功最后,尝试了brew安装成功如果读者使用的是Mac,请尝试尝试brew安装吧~

启动mongodb服务~

在控制台输入 mongod,这个指令是启动mongod的服务,当出现下图,表示成功~

启动mongodb数据库~

启动mongodb服务后重新打开一个新的控制台窗口启动mongodb数据库在新的控制台窗口输入mongo,这时候会出现下面的界面表示成功

使用Robmongo管理数据库~

在Mac上最好用的就是Robmongo把界面还行基本的功能也有~

创建mongodb的链接~

创建成功后就可以用上文中的小爬虫对mongodb添加数据了~


小爬虫使用小提示~

  • scrapy crawl YourSpiderName,,最后加的是爬虫name,而不是项目名字~
  • 需要的环境自己配置,跑不起来报错,请百度,爬虫笔者已经亲测,可以跑~
  • 本爬虫没有设置代理,因为用于学习交流吧~
  • 本爬虫已经更改请求头里的USER_AGENT,请改为自己的吧
  • 最后项目已经上传到github,github源代码地址https://github.com/Erma-Wang/Spider(注意,本仓库还有其他的小爬虫,本文章讲解的是JDSpider···),别忘了给个star哦@、@
  • 还要了解更多的小爬虫的朋友们可以关注本博,并在本博的spider中找到其他的小爬虫,笔者会定时更新小爬虫的~

重要的事情再说三遍:

本文和本爬虫只用于学习交流,不用于其他途径,后果自负

本文和本爬虫只用于学习交流,不用于其他途径,后果自负

本文和本爬虫只用于学习交流,不用于其他途径,后果自负

转载请注明来自吃饭睡觉撸码的博客 http://www.cnblogs.com/Erma-king/,并包含相关链接。

放养的小爬虫--豆瓣电影入门级爬虫(mongodb使用教程~)的更多相关文章

  1. [Python] 豆瓣电影top250爬虫

    1.分析 <li><div class="item">电影信息</div></li> 每个电影信息都是同样的格式,毕竟在服务器端是用 ...

  2. 微信小程序豆瓣电影项目的改造过程经验分享

    在学习微信小程序开发过程中,一部分的难点是前端逻辑的处理,也就是对前端JS的代码编辑:一部分的难点是前端界面的设计展示:本篇随笔基于一个豆瓣电影接口的小程序开源项目进行重新调整,把其中遇到的相关难点和 ...

  3. 微信小程序——豆瓣电影——(1):基础入门

    准备 Demo 项目地址 https://github.com/zce/weapp-demo Clone or Download(需准备GIT环境) $ cd path/to/project/root ...

  4. python爬虫-豆瓣电影的尝试

    一.背景介绍 1. 使用工具 Pycharm 2. 安装的第三方库 requests.BeautifulSoup 2.1 如何安装第三方库 File => Settings => Proj ...

  5. 一个豆瓣电影Top250爬虫

    一个爬虫 这是我第一次接触爬虫,写的第一个爬虫实例. https://movie.douban.com/top250 模块 import requests #用于发送请求 import re #使用正 ...

  6. Python爬虫-豆瓣电影 Top 250

    爬取的网页地址为:https://movie.douban.com/top250 打开网页后,可观察到:TOP250的电影被分成了10个页面来展示,每个页面有25个电影. 那么要爬取所有电影的信息,就 ...

  7. 记一次python爬虫实战,豆瓣电影Top250爬虫

    import requests from bs4 import BeautifulSoup import re import traceback def GetHtmlText(url): for i ...

  8. python爬虫: 豆瓣电影top250数据分析

    转载博客 https://segmentfault.com/a/1190000005920679 根据自己的环境修改并配置mysql数据库 系统:Mac OS X 10.11 python 2.7 m ...

  9. 微信小程序——豆瓣电影——(2):小程序运行部署

    Demo 预览 演示视频(流量预警 2.64MB) GitHub Repo 地址 仓库地址:https://github.com/zce/weapp-demo 使用步骤 将仓库克隆到本地: bash ...

随机推荐

  1. ABP理论学习之导航(Navigation)

    返回总目录 本篇目录 创建菜单 注册导航提供者 展示菜单 每一个web应用在页面之间都有一些要导航的菜单.ABP提供了公用的基础设施来创建菜单并将菜单展示给用户. 创建菜单 一个应用可能由不同的模块组 ...

  2. Lesson 13 The Greenwood Boys

    Text The Greenwood Boys are group of pop singers. At present, they are visiting all parts of the cou ...

  3. Lesson 7 Too late

    Text The plane was late and detectives were waiting at the airport all morning. They were expecting ...

  4. TCP/UDP简易通信框架源码,支持轻松管理多个TCP服务端(客户端)、UDP客户端

    目录 说明 TCP/UDP通信主要结构 管理多个Socket的解决方案 框架中TCP部分的使用 框架中UDP部分的使用 框架源码结构 补充说明 源码地址 说明 之前有好几篇博客在讲TCP/UDP通信方 ...

  5. 探索C#之微型MapReduce

    MapReduce近几年比较热的分布式计算编程模型,以C#为例简单介绍下MapReduce分布式计算. 阅读目录 背景 Map实现 Reduce实现 支持分布式 总结 背景 某平行世界程序猿小张接到B ...

  6. Senparc.Weixin.MP SDK 微信公众平台开发教程(十七):个性化菜单接口说明

    前不久微信上线了个性化菜单接口,Senparc.Weixin SDK也已经同步更新. 本次更新升级Senparc.Weixin.MP版本到v13.5.2,依赖Senparc.Weixin版本4.5.4 ...

  7. Java为何用xml做配置文件?

    在Java世界里xml配置文件几乎是首选,xml有什么好的特性呢? xml能存储小量数据,仅仅是存储数据. xml可以跨平台,主流各种平台都对xml有支持, 真正的跨平台, xml读取速度快. xml ...

  8. Spring学习记录(六)---使用外部属性文件

    在bean配置资源或系统部署,如数据库的连接时,需要这样: 要包含相关jar包:c3p0.jar 和mysql.connector.jar xml配置: <bean id="dataS ...

  9. 兼容各浏览器的js判断上传文件大小

    由于项目需要,在网上找了一个JS判断上传文件大小的程序,经测试兼容IE6-,Firefox10,Opera11.,safari5.,chrome17 <!DOCTYPE html> < ...

  10. Dnsmasq安装与配置

    默认的情况下,我们平时上网用的本地DNS服务器都是使用电信或者联通的,但是这样也导致了不少的问题,首当其冲的就是上网时经常莫名地弹出广告,或者莫名的流量被消耗掉导致网速变慢.其次是部分网站域名不能正常 ...