利用 pyspider 框架抓取猫途鹰酒店信息

  利用框架 pyspider 能实现快速抓取网页信息,而且代码简洁,抓取速度也不错。

  环境:macOS;Python 版本:Python3。

  1.首先,安装 pyspider 框架,使用pip3一键安装:

pip3 pyspider

2.终端输入 pyspider all 启动 pyspider:

打开 Chrome,地址栏输入 localhost:5000 进入 pyspider 框架的webui界面。

点击 create ,创建 一个新的project。

3.创建完 project 后,我们便进入了代码调试界面。

这次我们要抓取的信息是猫途鹰网关于布拉格的酒店信息,把网址填入 on_star 一栏并替换掉 on_star , 点击 save 保存,点击左上角 run 选项,然后点击出现的网址右侧的箭头的选项:

便出现 index_page 的页面,我们点击 web 选项卡,出现网页内容后点击 enable css selector helper  ,选中酒店标题的超链接,这时上方便出现该标题的 CSS 选择器,把选择器内容复制粘贴替换掉右侧代码中的 a[href^="http"] ,save 后再次点击 run,但是 pyspider 的选择器并不一定准确,需要自己随时更改。这时我们便得到了我们想要的酒店标题超链接。

4.点击其中一个网页的右边的小箭头,进入详情页界面,我们要获取的信息便是详情页中的内容。类似的用 CSS 选择器获取酒店的信息,写入代码如下:

 def detail_page(self, response):
        url = response.url
        name = response.doc('.heading_title').text()
        rating = response.doc('.header_rating .taLnk').text()
        ranking = response.doc('.prw_common_header_pop_index > span').text()
        location = response.doc('.colCnt3').text()
        phone = response.doc('.blEntry.phone > span:nth-child(2)').text()
        grade = response.doc('.overallRating').text()
        return {
            "url": url,
            "name": name,
            "rating": rating,
            "ranking": ranking,
            "location": location,
            "phone": phone,
            "grade": grade
       
        }

便返回酒店链接,名称,点评,排名,地址,电话,评分这七个信息,保存后点击 run,我们便能看到打印的信息。

5.存储信息到 MongoDB:

import pymongo

client = pymongo.MongoClient('localhost')
db = client['trip']

def on_result(self, result):
    if result:
        self.save_to_mongo(result)

def save_to_mongo(self, result):
    if self.db['布拉格'].insert(result):
        print('存储到 MongoDB 成功', result)

6.模拟翻页抓取多页面:

在 index_page(self, response) 函数中插入:

next = response.doc('.pagination .nav.next').attr.href
self.crawl(next, callback=self.index_page)

7.到这时,我们代码便写完了,退出 project ,在控制面板中 status 栏更改方式为 DEBUG ,点击 run,运行代码,Active Tasks 可以查看当前任务。

8.存储到MongoDB 的信息。

到现在,我们便完成了对猫途鹰网上布拉格酒店信息的爬取。

参考文档:http://docs.pyspider.org

代码 github 地址:https://github.com/weixuqin/PythonProjects/blob/master/pyspider/spider.py

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏云加头条

如何在腾讯云上开发一款O2O书签?

作者在看书的时候突发奇想,通过一张书签的二维码扫一扫就能知道自己最近在读哪本书,于是自己在腾讯云中从0到1开发一款O2O书签。

4100
来自专栏程序员的诗和远方

React Native 实现二维码扫描

最近刚好在学习 React Native 想搞个扫描条形码,二维码的小应用,因为涉及硬件接口,而且自己本身并没有原生开发背景,踩了几个坑,记录一下。 扫描...

5758
来自专栏老马寒门IT

11-移动端开发教程-zepto.js入门教程

Zepto.js是一个轻量级的针对现代浏览器的JavaScript库, 它与jquery有着类似的api。 如果你会用jquery,那么你也会用zepto。 1...

3485
来自专栏Coding迪斯尼

Reactjs+BootStrap开发自制编程语言Monkey的编译器:创建简易的页面IDE

1692
来自专栏更流畅、简洁的软件开发方式

自然框架,拆分后的项目关系

  拆分了一下自然框架,似乎又绕回去了。以前是多个项目分开放的,有人说太分散了,还得一个个下载,麻烦。于是就做了一个解决方案,把项目都放在了一起。   现在呢,...

2265
来自专栏司想君

React编程思想

在我们团队看来,React是使用JavaScript构建大型、快速的Web apps的首选方式。它已经在Facebook和Instagram项目中,表现出了非常...

4109
来自专栏贾鹏辉的技术专栏@CrazyCodeBoy

React Native 每日一学(Learn a little every day)

本文出自《React Native学习笔记》系列文章。 每天一个知识点(技巧,经验,填坑日记等),每天学一点,离大神近一点。 汇聚知识,分享精华。 如果你是一...

3909
来自专栏极乐技术社区

五个套路看懂微信小程序开发(上)

你或许听说过,快速入门就是要学最小必要知识。而我最近在看微信小程序的官方教程时发现,这个教程虽然简单,但对于微信小程序开发来说,80%的套路都能从这里学习到,你...

2799
来自专栏Youngxj

EMLOG评论获取QQ资料

3034
来自专栏司想君

React编程思想

能够按照构建的方式来思考web app的实现,是React众多优点之一。在这篇文章中,我们将引导你进行使用React构建可搜索产品数据表的思考过程。

5165

扫码关注云+社区

领取腾讯云代金券