scrapy框架基本使用

学习爬虫不能不使用框架,而python爬虫框架中最常用的就是scrapy了。

学习文档:scrapy0.24文档

1.创建project

scrapy startproject test1

然后,在当前文件夹下就会产生一个文件夹"test1"

文件结构如下:

test1/
    scrapy.cfg
    tutorial/
        __init__.py
        items.py
        pipelines.py
        settings.py
        spiders/
            __init__.py
首先,在items.py中定义容器类型,也就是将需要提取的信息建模,比如我要获取网页中的标题和简介信息,我就定义以下字段

class test1Item(scrapy.Item):
    title =  scrapy.Field()
    desc = scrapy.Field()

所有的自定义的item都继承了scrapy.Item,可以使用相应的方法。


然后就可以写爬虫程序了。

在spider文件夹下创建相应的爬虫脚本

# -*- coding: utf-8 -*-
import scrapy


class MydomainSpider(scrapy.Spider):
    name = "mydomain"
    allowed_domains = ["mydomain.com"]
    start_urls = (
        'http://www.mydomain.com/',
    )

    def parse(self, response):
        pass


这是通过终端创建的一个爬虫文件,我们先来看一下各部分的功能。

name:定义spider名字的字符串

allowed_domains包含允许爬虫爬取的列表

start_urls:爬虫开始爬取的位置将是列表之一,而后续的url通过后续的数据爬取

parse函数:当response没有指定回调函数将会默认调用该函数,用于处理返回数据,返回值必须为一个Request或者item

再举个例子

# -*- coding:utf-8 -*-

import scrapy
from scrapy_2.items import Scrapy2Item, tuiku_item
from scrapy.contrib.spiders import CrawlSpider, Rule , XMLFeedSpider
from scrapy.contrib.linkextractors import LinkExtractor
from scrapy.selector import Selector
from scrapy.http import HtmlResponse

class spider1(scrapy.Spider):
    name = "spider1"

    def __init__(self, category = None, *args, **kwargs):
        super(spider1, self).__init__(*args, **kwargs)
        self.start_urls = ["http://www.tuicool.com/"]


    def start_requests(self):
        return [scrapy.FormRequest(
            'http://www.tuicool.com/login/',
            formdata={'email':'786127150@qq.com',
                     'password':'1223334',
                     'remember':'1'
            },
            #callback = self.logged_in,
        )]

    def logged_in(self, response):
        self.log('A new response from %s just arrived.' % response.url)
        #self.log(response.info)

    def parse(self, response):
        self.log('A respose from %s just arrived.' % response.url)
        print response.body

这个例子里面我传送的是个POST的request,然后获取登陆后的网页。

之后就是提取信息了,我们使用Selector来匹配信息。

xpath的知识请点这里

根据源代码匹配的代码如下:

def parse(self, response):
        self.log('A respose from %s just arrived.' % response.url)
        #print response.body
        item = []
        sel = scrapy.Selector(response)
        for path in sel.xpath('//div[contains(@class, "single_left")]'):
            items = tuiku_item()
            items["title"] = path.xpath('div[contains(@class, "article_title abs-title")]/a/text()').extract()
            items["desc"] = path.xpath('div[contains(@class, "article_cut")]/text()').extract()
            item.append(items)
        return item

在settings.py设置FEED_URI和FEED_FORMAT来将获得的信息保存

FEED_URI = "tuiku.xml"
FEED_FORMAT = "xml"

执行scrapy crawl spider1,在根目录下可找到爬取的信息





  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值