我们的爬虫从pyspider开始说起(一)
看各种爬虫文献也有好几天了,总是感觉下不了手,总结一句“提笔忘字,总是因为看的太多而写的太少”。所以从现在开始,把看到的想到的,需要总结的东西慢慢的都沉淀下来,扎扎实实的走好每一步。
先来说这几天遇到的各种坑,好不容易找到了关于pyquery和pyspider的各种资料,准备敲到电脑上试试,结果出现了好几个问题。电脑上安装的是python3,代码是python2,转换好了环境,发现目标网站的格式变得,各种苦恼,各种困惑。或许这也是很多学习写爬虫的人总会遇到的问题。从网上下载了几本书,对照着写,结果发现各种库的调用格式都变了,真的是各种坑,各种坑,坑。。。。。
先来看pyspider的官方docs中的第一个例子
from pyspider.libs.base_handler import * class Handler(BaseHandler):
crawl_config = {
} @every(minutes=24 * 60)
def on_start(self):
self.crawl('http://scrapy.org/', callback=self.index_page) #很逗比的pyspider的案例居然爬去另一位大神之作scrapy的网站,这一行可以看作是初始化,从callback函数中可以看出调用index_page @config(age=10 * 24 * 60 * 60)
def index_page(self, response):
for each in response.doc('a[href^="http"]').items(): # 用pyquery解析获取初始链接中的每一个超级链接,对每一个链接再调用detail_page,需要注意的是如果需要翻页的话,在翻页的链接上再调用index_page
self.crawl(each.attr.href, callback=self.detail_page) @config(priority=2)
def detail_page(self, response): #在detail_page页面中获取 url和title,并返回
return {
"url": response.url,
"title": response.doc('title').text(),
}
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)方法处理存储方式。
@every(minutes=24*60, seconds=0)* 24小时乘以60分整天运行@config(age=10 * 24 * 60 * 60)* 运行10天age=10 * 24 * 60 * 60* tell scheduler discard the request if it have been crawled in 10 days. pyspider will not crawl a same URL twice by default (discard forever), even you had modified the code, it's very common for beginners that runs the project the first time and modified it and run it the second time, it will not crawl again (readitagfor solution)@config(priority=2)* detail pages 优先运行
官方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抓取的,需要进一步解析,明天再来(*^_^*)
我们的爬虫从pyspider开始说起(一)的更多相关文章
- Python的两个爬虫框架PySpider与Scrapy安装
Python的两个爬虫框架PySpider与Scrapy安装 win10安装pyspider: 最好以管理员身份运行CMD,不然可能会出现拒绝访问文件夹的情况! pyspider:pip instal ...
- Python爬虫之PySpider框架
概述 pyspider 是一个支持任务监控.项目管理.多种数据库,具有 WebUI 的爬虫框架,它采用 Python 语言编写,分布式架构.详细特性如下: 拥有 Web 脚本编辑界面,任务监控器,项目 ...
- [转]Python爬虫框架--pyspider初体验
标签: python爬虫pyspider 2015-09-05 10:57 9752人阅读 评论(0) 收藏 举报 分类: Python(8) 版权声明:本文为博主原创文章,未经博主允许不得转载. ...
- 爬虫之pyspider
1.简单的介绍 pyspider是由国人binux编写的强大的网络爬虫系统,其GitHub地址为 https://github.com/binux/pyspider 官方文档地址为 http://do ...
- 爬虫框架pyspider的使用
j概要:了解了爬虫的基础知识后,接下来我们来使用框架来写爬虫,用框架会使我们写爬虫更加简单,接下来我们来了解一下,pyspider框架的使用,了解了该框架,妈妈再也不用担心我们的学习了. 前期准备: ...
- Python爬虫之一 PySpider 抓取淘宝MM的个人信息和图片
ySpider 是一个非常方便并且功能强大的爬虫框架,支持多线程爬取.JS动态解析,提供了可操作界面.出错重试.定时爬取等等的功能,使用非常人性化. 本篇通过做一个PySpider 项目,来理解 Py ...
- Python爬虫框架--pyspider初体验
之前接触scrapy本来是想也许scrapy能够让我的爬虫更快,但是也许是我没有掌握scrapy的要领,所以爬虫运行起来并没有我想象的那么快,看这篇文章就是之前使用scrapy的写得爬虫.然后昨天我又 ...
- 爬虫之pyspider 安装
解决方法: 利用wheel安装 S1: pip install wheelS2: 进入www.lfd.uci.edu/~gohlke/pythonlibs/,Ctrl + F查找pycurl S3:这 ...
- python爬虫框架Pyspider初次接触
pyspider网站地址:http://docs.pyspider.org/en/latest/.文档比较好,安装起来也非常方便.既然是基于python的框架,那么首先得安装python.微软出的一款 ...
随机推荐
- 服务器端AJAX的Servlet代码实现
package com.itheima.servlet; import java.io.IOException; import javax.servlet.ServletException; impo ...
- IO分类
按流向分类: 输入流 读取数据 FileReader Reader 输出流 写入数据 FileWriter Writer 按数据类型分类: 字节流 字节输入流 读取数据 InputStream 字节输 ...
- Java框架spring 学习笔记(十五):操作MySQL数据库
新建一个工程,添加对数据库的支持 下载mysql驱动包 mysql-connector-java-5.1.7-bin.jar,快捷键ctrl+alt+shift+s,添加jar包到工程 编写JdbcT ...
- 20175314 《Java程序设计》第九周学习总结
20175314 <Java程序设计>第九周学习总结 教材学习内容总结 根据课本的介绍下载了MySQL和Navicat for MySQL并成功对后者进行破解 MySQL客户端管理工具(如 ...
- POJ-3660.Cow Contest(有向图的传递闭包)
Cow Contest Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 17797 Accepted: 9893 De ...
- 跳转Activity时清除当前Activity
void GotoMainActivity(){ Intent intent = new Intent(ProductionInformationActivity.this, MainActivity ...
- UEFI Shell命令操作总结
什么是UEFI ShellUEFI Shell是一种特殊对待UEFI_APPLICATION.提供用户和UEFI系统之间的一个接口.它有很强大的功能,但是正常启动计算机系统时,不会用到UEFI She ...
- python note 16 re模块的使用
1.re模块(#regex) # 查找 # findall : 匹配所有 每一项都是列表中的一个元素 import re ret = re.findall('\d+','dawdawd154wadwa ...
- .Net代码控制PrivateBinPath和ConfigurationFile的位置
.Net的WinForm程序有的时候让人很烦的是,在执行目录下总是一大堆的DLL,配置文件,最少则是个以下,多的时候怕有四五十个吧……,自己程序中的类库,第三方的类库……加载一起让人感觉乱糟糟的,非常 ...
- k8s中yaml文常见语法
在k8s中,所有的配置都是 json格式的.但为了读写方便,通常将这些配置写成yaml 格式,其运行的时候,还是会靠yaml引擎将其转化为json,apiserver 也仅接受json的数据类型. y ...