Scrapy爬虫学习,及实践项目。

作为初学者,首先贴出自己看到的一个教程所提供的实例。。后边会讲解我自身所完成的项目说明。

我自己所做项目下载地址为:Scrapy爬虫项目

自己项目说明:

	爬取某网站流行时尚网页项目,并对具体项目内容进行二次爬取,将爬取到的内容拼接成为新的静态html,存入自身Ftp服务器,并将信息提交到某接口。。(接口中进行数据操作。接口部分未上传)






示例

scrapy爬取了链接之后,如何继续进一步爬取该链接对应的内容?
parse可以返回Request列表,或者items列表,如果返回的是Request,则这个Request会放到下一次需要抓取的队列,如果返回items,则对应的items才能传到pipelines处理(或者直接保存,如果使用默认FEED exporter)。那么如果由parse()方法返回下一个链接,那么items怎么返回保存? Request对象接受一个参数callback指定这个Request返回的网页内容的解析函数(实际上start_urls对应的callback默认是parse方法),所以可以指定parse返回Request,然后指定另一个parse_item方法返回items:

以爬取南京大学bbs为例:

1. spider下的文件:
# -*- coding: utf-8 -*-
import chardet
from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector
from scrapy.utils.url import urljoin_rfc
from scrapy.http import Request
from tutorial.items import bbsItem

class bbsSpider(BaseSpider):
    name = "boat"
    allowed_domains = ["bbs.nju.edu.cn"]
    start_urls = ["http://bbs.nju.edu.cn/bbstop10"]
    def parseContent(self,content):
        content = content[0].encode('utf-8')
        #print chardet.detect(content)
        #print content
        authorIndex =content.index('信区')
        author = content[11:authorIndex-2]
        boardIndex = content.index('标 题')
        board = content[authorIndex+8:boardIndex-2]
        timeIndex = content.index('南京大学小百合站 (')
        time = content[timeIndex+26:timeIndex+50]
        return (author,board,time)
    #content = content[timeIndex+58:]
    #return (author,board,time,content)
    def parse2(self,response):
        hxs =HtmlXPathSelector(response)
        item = response.meta['item']
        items = []
        content = hxs.select('/html/body/center/table[1]/tr[2]/td/textarea/text()').extract()
        parseTuple = self.parseContent(content)
        item['author'] = parseTuple[0].decode('utf-8')
        item['board'] =parseTuple[1].decode('utf-8')
        item['time'] = parseTuple[2]
        #item['content'] = parseTuple[3]
        items.append(item)
        return items
    def parse(self, response):
        hxs = HtmlXPathSelector(response)
        items = []
        title= hxs.select('/html/body/center/table/tr[position()>1]/td[3]/a/text()').extract()
        url= hxs.select('/html/body/center/table/tr[position()>1]/td[3]/a/@href').extract()
        for i in range(0, 10):
            item = bbsItem()
            item['link'] = urljoin_rfc('http://bbs.nju.edu.cn/', url[i])
            item['title'] = title[i][:]
            items.append(item)
        for item in items:
            yield Request(item['link'],meta={'item':item},callback=self.parse2)
2. pipelines文件:

# -*- coding: utf-8 -*-
# Define your item pipelines here
# Don‘t forget to add your pipeline to the ITEM_PIPELINES setting
# See: http://doc.scrapy.org/topics/item-pipeline.html

from scrapy import log
from twisted.enterprise import adbapi
from scrapy.http import Request
from scrapy.exceptions import DropItem
from scrapy.contrib.pipeline.images import ImagesPipeline
import time
import MySQLdb
import MySQLdb.cursors
import socket
import select
import sys
import os
import errno

class MySQLStorePipeline(object):
    def __init__(self):
        self.dbpool = adbapi.ConnectionPool(‘MySQLdb‘,
            db = ‘test‘,
            user = ‘root‘,
            passwd = ‘root‘,
            cursorclass = MySQLdb.cursors.DictCursor,
            charset = ‘utf8‘,
            use_unicode = False
        )
    def process_item(self, item, spider):
        query = self.dbpool.runInteraction(self._conditional_insert, item)
        return item

    def _conditional_insert(self, tx, item):
        tx.execute(‘insert into info values (%s, %s, %s)‘, (item[‘author‘], item[‘board‘], item[‘time‘]))

时间: 2024-10-09 22:33:01

Scrapy爬虫学习,及实践项目。的相关文章

scrapy 爬虫学习二[中间件的学习]

scrapy源码解析参考连接:https://www.jianshu.com/p/d492adf17312 ,直接看大佬的就行了,这里便就不多说了. 今天要学习的是:Scrapy框架中的download middlerware[下载中间件]用法. 一:官方文档中,对下载中间件的解释如下 下载中间件是介于scrapy的requests/response处理的钩子框架,是用于全局修改scrapy requests和response的一个轻量.底层的系统. 二:使用下载器中间件时必须激活这个中间件,方

scrapy爬虫学习系列四:portia的学习入门

portia的简介: Portia是我们的开源可视化爬虫工具,可让您在不需要任何编程知识的情况下爬取网站!简单地注释您感兴趣的页面,Portia将创建一个蜘蛛来从类似的页面提取数据 scrapyhub上的一些简介视频(需FQ): https://helpdesk.scrapinghub.com/support/solutions/articles/22000201027-learn-portia-video-tutorials- scrapyhub上的完整入门手册:https://helpdes

Scrapy爬虫学习笔记 - windows下搭建开发环境1

一.pycharm的安装和简单使用                                   二.mysql和navicat的安装和使用    三.windows和linux下安装python2和python3                         原文地址:https://www.cnblogs.com/tanrong/p/8496823.html

爬虫学习 10.scrapy框架简介和基础应用

爬虫学习 10.scrapy框架简介和基础应用 今日概要 scrapy框架介绍 环境安装 基础使用 今日详情 一.什么是Scrapy? Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架,非常出名,非常强悍.所谓的框架就是一个已经被集成了各种功能(高性能异步下载,队列,分布式,解析,持久化等)的具有很强通用性的项目模板.对于框架的学习,重点是要学习其框架的特性.各个功能的用法即可. 二.安装 Linux: ``pip3 install scrapy Windows: ``a. p

爬虫学习 12.scrapy框架之递归解析和post请求

爬虫学习 12.scrapy框架之递归解析和post请求 今日概要 递归爬取解析多页页面数据 scrapy核心组件工作流程 scrapy的post请求发送 今日详情 1.递归爬取解析多页页面数据 - 需求:将糗事百科所有页码的作者和段子内容数据进行爬取切持久化存储 - 需求分析:每一个页面对应一个url,则scrapy工程需要对每一个页码对应的url依次发起请求,然后通过对应的解析方法进行作者和段子内容的解析. 实现方案: 1.将每一个页码对应的url存放到爬虫文件的起始url列表(start_

Scrapy爬虫框架的学习

第一步安装 首先得安装它,我使用的pip安装的 因为我电脑上面安装了两个python,一个是python2.x,一个是python3.x,所以为了区分,所以,在cmd中,我就使用命令:python2 -m pip install Scrapy  (注意我这里使用python2的原因是我给2个python重命名了一下) 安装之后,输入scrapy,出现如下图这样子的信息,表示成功安装了 如果有错误,可以参考一下:http://www.cnblogs.com/angelgril/p/7511741.

同时运行多个scrapy爬虫的几种方法(自定义scrapy项目命令)

试想一下,前面做的实验和例子都只有一个spider.然而,现实的开发的爬虫肯定不止一个.既然这样,那么就会有如下几个问题:1.在同一个项目中怎么创建多个爬虫的呢?2.多个爬虫的时候是怎么将他们运行起来呢? 说明:本文章是基于前面几篇文章和实验的基础上完成的.如果您错过了,或者有疑惑的地方可以在此查看: 安装python爬虫scrapy踩过的那些坑和编程外的思考 scrapy爬虫成长日记之创建工程-抽取数据-保存为json格式的数据 scrapy爬虫成长日记之将抓取内容写入mysql数据库 如何让

在Pycharm中运行Scrapy爬虫项目的基本操作

目标在Win7上建立一个Scrapy爬虫项目,以及对其进行基本操作.运行环境:电脑上已经安装了python(环境变量path已经设置好), 以及scrapy模块,IDE为Pycharm .操作如下: 一.建立Scrapy模板.进入自己的工作目录,shift + 鼠标右键进入命令行模式,在命令行模式下, 输入scrapy startproject 项目名 ,如下: 看到以上的代码说明项目已经在工作目录中建好了. 二.在Pycharm中scrapy的导入.在Pycharm中打开工作目录中的TestD

Python爬虫教程-31-创建 Scrapy 爬虫框架项目

本篇是介绍在 Anaconda 环境下,创建 Scrapy 爬虫框架项目的步骤,且介绍比较详细 Python爬虫教程-31-创建 Scrapy 爬虫框架项目 首先说一下,本篇是在 Anaconda 环境下,所以如果没有安装 Anaconda 请先到官网下载安装 Anaconda 下载地址:https://www.anaconda.com/download/ Scrapy 爬虫框架项目的创建 0.打开[cmd] 1.进入你要使用的 Anaconda 环境 1.环境名可以在[Pycharm]的[Se