我们的爬虫从pyspider开始说起(一)

  看各种爬虫文献也有好几天了,总是感觉下不了手,总结一句“提笔忘字,总是因为看的太多而写的太少”。所以从现在开始,把看到的想到的,需要总结的东西慢慢的都沉淀下来,扎扎实实的走好每一步。

  先来说这几天遇到的各种坑,好不容易找到了关于pyquery和pyspider的各种资料,准备敲到电脑上试试,结果出现了好几个问题。电脑上安装的是python3,代码是python2,转换好了环境,发现目标网站的格式变得,各种苦恼,各种困惑。或许这也是很多学习写爬虫的人总会遇到的问题。从网上下载了几本书,对照着写,结果发现各种库的调用格式都变了,真的是各种坑,各种坑,坑。。。。。

  先来看pyspider的官方docs中的第一个例子

 1 from pyspider.libs.base_handler import *
 2
 3
 4 class Handler(BaseHandler):
 5     crawl_config = {
 6     }
 7
 8     @every(minutes=24 * 60)
 9     def on_start(self):
10         self.crawl(‘http://scrapy.org/‘, callback=self.index_page)    #很逗比的pyspider的案例居然爬去另一位大神之作scrapy的网站,这一行可以看作是初始化,从callback函数中可以看出调用index_page
11
12     @config(age=10 * 24 * 60 * 60)
13     def index_page(self, response):
14         for each in response.doc(‘a[href^="http"]‘).items():         # 用pyquery解析获取初始链接中的每一个超级链接,对每一个链接再调用detail_page,需要注意的是如果需要翻页的话,在翻页的链接上再调用index_page
15             self.crawl(each.attr.href, callback=self.detail_page)
16
17     @config(priority=2)
18     def detail_page(self, response):    #在detail_page页面中获取 url和title,并返回
19         return {
20             "url": response.url,
21             "title": response.doc(‘title‘).text(),
22         }
  • def on_start(self) 是爬虫的入口,当点击run时显示的第一个页面
  • self.crawl(url, callback=self.index_page)*  是程序最重要的接口。它添加了一个新的爬去任务。需要注意的是self.crawl 中有很多参数可以自己设置。
  • def index_page(self, response)返回一个 Response* 对象. response.doc*pyquery 对象,这个对象就像 jQuery的 API 一样获取元素。
  • def detail_page(self, response)返回字典对象. 这个结果默认由resultdb获取. 可以通过改写 on_result(self, result)方法处理存储方式。

官方docs中爬取 http://www.imdb.com的爬虫也因为IMDB的改版已经不能使用,顺手调试了一下代码

#!/usr/bin/env python
# -*- encoding: utf-8 -*-
# Created on 2015-01-04 03:08:55
# Project: tutorial_imdb

from pyspider.libs.base_handler import *

class Handler(BaseHandler):
    """
    It‘s a sample scrape script of pyspider tutorial: Level 1: HTML and CSS Selector
    http://docs.pyspider.org/en/latest/tutorial/HTML-and-CSS-Selector/
    """

    @every(minutes=24 * 60)
    def on_start(self):
        self.crawl(‘http://www.imdb.com/search/title?count=100&title_type=feature,tv_series,tv_movie&ref_=nv_ch_mm_1‘, callback=self.index_page)

    @config(age=24 * 60 * 60)
    def index_page(self, response):
        for each in response.doc(‘a[href^="http"]‘).items():
            for each in response.doc(‘h3.lister-item-header a‘).items():   把官方文档中的正则表达式改成了css path,这样看起来容易理解多了
                self.crawl(each.attr.href, priority=9, callback=self.detail_page)
        self.crawl([x.attr.href for x in response.doc(‘.next-page‘).items()], callback=self.index_page)

    def detail_page(self, response):
        return {
            "url": response.url,
            "title": response.doc(‘div.title_wrapper h1‘).text(),
            "rating": response.doc(‘div.ratingValue strong span‘).text(),
            "stars": [x.text() for x in response.doc(‘div.credit_summary_item span a span.itemprop‘).items()],
        }

进一步分析IMDB网站就会发现,影片详细信息页面下面的很多是不能够用csspath抓取的,需要进一步解析,明天再来(*^_^*)

时间: 2024-10-11 07:08:18

我们的爬虫从pyspider开始说起(一)的相关文章

Python爬虫框架--pyspider初体验

之前接触scrapy本来是想也许scrapy能够让我的爬虫更快,但是也许是我没有掌握scrapy的要领,所以爬虫运行起来并没有我想象的那么快,看这篇文章就是之前使用scrapy的写得爬虫.然后昨天我又看到了pyspider,说实话本来只是想看看,但是没想到一看就让我喜欢上了pyspider. 先给大家看一下pyspider的后台截图:  pyspider是国人写的一款开源爬虫框架,个人觉得这个框架用起来很方便,至于如何方便可以继续看下去. 作者博客:http://blog.binux.me/ 这

爬虫框架pyspider的使用

j概要:了解了爬虫的基础知识后,接下来我们来使用框架来写爬虫,用框架会使我们写爬虫更加简单,接下来我们来了解一下,pyspider框架的使用,了解了该框架,妈妈再也不用担心我们的学习了. 前期准备: 1.安装pyspider:pip3 install pyspider 2.安装Phantomjs:在官网下载解压后,并将pathtomjs.exe拖进安装python路径下的Scripts下即可. 下载地址:https://phantomjs.org/dowmload.html 官方API地址:ht

Python爬虫写在前面

不知道大家有没有和我一样的想法,最开始学习Python的兴趣就是为了爬虫,爬一些好看的妹子图片... 恩,准备进入正题了!最近一段时间没有怎么更新公众号,主要就是在做爬虫教程的一些准备工作,看看爬虫需要用到那些技术,然后做个计划出来,确定一下学习课程中缝,这不今天就先列出一些玩爬虫需要的准备工作! Python爬虫这门技术你可以做得很简单,你也可以玩得很深入.打比方用简单的爬虫方式爬取1000万条数据可能需要一周时间,但如果你的爬虫玩得比较厉害,你可以采用分布式爬虫技术1天就能完成了1000万条

python3 分布式爬虫

背景 部门(东方IC.图虫)业务驱动,需要搜集大量图片资源,做数据分析,以及正版图片维权.前期主要用node做爬虫(业务比较简单,对node比较熟悉).随着业务需求的变化,大规模爬虫遇到各种问题.python爬虫具有先天优势,社区资源比较齐全,各种框架也完美支持.爬虫性能也得到极大提升.本次分享从基础知识入手,涉及python 的两大爬虫框架pyspider.scrapy,并基于scrapy.scrapy-redis 做了分布式爬虫的介绍(直接粘贴的ppt截图)会涉及 redis.mongodb

python3.7与pyspider的坑

网络上安装pyspider的坑有很多,但都不如我今天的大,困扰了我几天,终于解决了 Traceback (most recent call last): File "/ffk_learn/software/Python-3.7.0/ffk_py/bin/pyspider", line 7, in <module> from pyspider.run import main File "/ffk_learn/software/Python-3.7.0/ffk_py/

一些Python爬虫工具

爬虫可以简单分为三步骤:请求数据.解析数据和存储数据 .主要的一些工具如下: 请求相关 request 一个阻塞式http请求库. Selenium Selenium是一个自动化测试工具,可以驱动浏览器执行特定的动作,如点击,下拉等操作.对于一些javascript渲染的页面,这种抓取方式非常有效. ChromeDriver.GeckoDriver 只有安装了ChromeDriver和GeckoDriver之后,Selenium才能驱动Chrome或者Firefox浏览器来做相应的网页抓取. P

Python3分布式爬虫(scrap+redis)基础知识和实战详解

背景 随着业务需求的变化,大规模爬虫遇到各种问题.python爬虫具有先天优势,社区资源比较齐全,各种框架也完美支持.爬虫性能也得到极大提升.本次分享从基础知识入手,涉及python 的两大爬虫框架pyspider.scrapy,并基于scrapy.scrapy-redis 做了分布式爬虫的介绍(直接粘贴的ppt截图)会涉及 redis.mongodb等相关知识. 一.前沿 1.1 爬虫是什么? 网络爬虫(又被称为网页蜘蛛,网络机器人),是一种按照一定的规则,自动的抓取万维网信息的程序或者脚本.

十年开发工程师告诉你python是做什么的,零基础的必看哦!

Python , 是一种面向对象的解释型计算机程序设计语言,具有丰富和强大的库,Python 已经成为继JAVA,C 之后的的第三大语言. 特点:简单易学.免费开源.高层语言.可移植性强.面向对象.可扩展性.可嵌入型.丰富的库.规范的代码等.创一个小群,供大家学习交流聊天如果有对学python方面有什么疑惑问题的,或者有什么想说的想聊的大家可以一起交流学习一起进步呀.也希望大家对学python能够持之以恒python爱好群,如果你想要学好python最好加入一个组织,这样大家学习的话就比较方便,

ValueError: Invalid configuration: - Deprecated option &#39;domaincontroller&#39;: use &#39;http_authenticator

安装完爬虫框架pyspider之后,使用pyspider all 命令,输入http://localhost:5000运行就出现上述错误 原因是因为WsgiDAV发布了版本 pre-release 3.x. 解决方法如下: 在安装包中找到pyspider的资源包,然后找到webui文件里面的webdav.py文件打开,修改第209行即可. 把 'domaincontroller': NeedAuthController(app), 修改为: 'http_authenticator':{ 'HTT