爬虫随笔(2):商业爬虫工具Scrapy的学习

一、配置环境

在CMD命令台输入安装命令:

> pip install scrapy

检查安装情况:

> scrapy

Scrapy 1.5.0 - no active project

Usage:...

#返回以上信息说明安装成功

二、爬虫命令台命令

Available commands:
  bench         Run quick benchmark test
  check         Check spider contracts
  crawl         Run a spider
  edit          Edit spider
  fetch         Fetch a URL using the Scrapy downloader
  genspider     Generate new spider using pre-defined templates
  list          List available spiders
  parse         Parse URL (using its spider) and print the results
  runspider     Run a self-contained spider (without creating a project)
  settings      Get settings values
  shell         Interactive scraping console
  startproject  Create new project
  version       Print Scrapy version
  view          Open URL in browser, as seen by Scrapy

三、建立第一个Scrapy爬虫

在CMD下转到工程文件夹,之后输入:

#新建爬虫工程
> scrapy startproject test_proj
> cd test_proj

以和讯银行的官网示例:

#以默认模板建立一个爬虫文件test
> scrapy genspider test bank.hexun.com

运行爬虫:

> scrapy crawl test

2018-05-08 22:45:22 [scrapy.utils.log] INFO: Scrapy 1.5.0 started (bot: study)
2018-05-08 22:45:22 [scrapy.utils.log] INFO: Versions: lxml 4.1.1.0, libxml2 2.9.7, cssselect 1.0.3, parsel 1.4.0, w3lib 1.19.0, Twisted 17.9.0, Python 2.7.14 |Anaconda, Inc.| (default, Nov  8 2017, 13:40:45) [MSC v.1500 64 bit (AMD64)], pyOpenSSL 17.5.0 (OpenSSL 1.0.2n  7 Dec 2017), cryptography 2.1.4, Platform Windows-10-10.0.16299
2018-05-08 22:45:22 [scrapy.crawler] INFO: Overridden settings: {'NEWSPIDER_MODULE': 'study.spiders', 'SPIDER_MODULES': ['study.spiders'], 'ROBOTSTXT_OBEY': True, 'BOT_NAME': 'study'}
[...]
#输出的是日志,其中包括了各个板块的信息,加上参数可以不打印日志

> scrapy crawl test --nolog

四、初步爬取网页内容

当你正式开始Scrapy的学习的时候,一定不要觉得框架啥的就很高大上,本质上你要写的东西还是那么多:根据URL生成Requests和Response,下载源码,筛选信息,数据保存,反爬机制……

总之一句话,按下文顺序,在该写的地方写上你的代码,很快你就体会到Scrapy是如何工作的,进而好像大彻大悟地学会了Scrapy!而很多骚操作,后续再说。

首先是spider文件夹下的主爬虫程序:

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

class TestSpider(scrapy.Spider):
    name = 'test'
    allowed_domains = ['bank.hexun.com']
    start_urls = ['http://bank.hexun.com/']

    def parse(self, response):
        filename = 'successfully.txt'
        with open(filename, 'wb') as f:
            f.write(response.url.split('/')[-2]+'\n')
            f.write(response.body)

1.Scrapy为Spider的start_urls属性中的每个URL创建了scrapy.Request对象,并将 parse()方法作为回调函数赋值给了Request

2.Request对象经过调度,执行生成scrapy.http.Response对象并送回给上述的parse()方法。

五、定位页面标签

在商业爬虫scrapy,BeautifulSoup的方法已经落伍了。在前面的学习中,已经使用到了Xpathre正则的方法来定位标签。Scrapy使用了一种基于 XPath 和 CSS 表达式机制: Scrapy Selectors。

1、Xpath表达式
/html/head/title        #选择HTML文档中<head>标签内的<title>元素
/html/head/title/text() #选择上面提到的 <title> 元素的文字
//td                    #选择所有的 <td> 元素
//div[@class="mine"]    #选择所有具有class="mine"属性的div元素
2、CSS表达式
#一个示例
'div.temp01 ul li a::attr(href)'
3、Selector四个基本方法
xpath(): 传入xpath表达式,返回该表达式所对应的所有节点的selector list列表 。
css(): 传入CSS表达式,返回该表达式所对应的所有节点的selector list列表.
extract(): 序列化该节点为unicode字符串并返回list。
re(): 根据传入的正则表达式对数据进行提取,返回unicode字符串list列表。
4、scrapy shell

scrapy集成了一个本人十分喜欢的shell系统,可以实时调试标签定位。

> scrapy shell http://bank.hexun.com/yhjg/ --nolog

[s] Available Scrapy objects:
[s]   scrapy     scrapy module (contains scrapy.Request, scrapy.Selector, etc)
[s]   crawler    <scrapy.crawler.Crawler object at 0x0000000007E17D68>
[s]   item       {
   }
[s]   request    <GET http://bank.hexun.com/yhjg/>
[s]   response   <200 http://bank.hexun.com/yhjg/>
[s]   settings   <scrapy.settings.Settings object at 0x0000000007E17898>
[s]   spider     <TestSpider 'test' at 0x8a4dda0>
[s] Useful shortcuts:
[s]   fetch(url[, redirect=True]) Fetch URL and update local objects (by default, redirects are followed)
[s]   fetch(req)                  Fetch a scrapy.Request 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值