zoukankan      html  css  js  c++  java
  • 爬虫7:Scrapy-爬网页

    用Scrapy做爬虫分为四步

    • 新建项目 (Project):新建一个新的爬虫项目
    • 明确目标(Items):明确你想要抓取的目标
    • 制作爬虫(Spider):制作爬虫开始爬取网页
    • 存储内容(Pipeline):设计管道存储爬取内容

    上一章节做了创建项目,接着用上一次创建的项目来爬取网页

    网上很多教程都是用的dmoz.org这个网站来做实验,所以我也用这个来做了实验

    明确目标

    在Scrapy中,items是用来加载抓取内容的容器

    我们想要的内容是

    • 名称(name)
    • 链接(url)
    • 描述(description)

    在tutorial目录下会有items.py文件,在默认的代码后面添加上我们的代码

    # -*- coding: utf-8 -*-
    
    # Define here the models for your scraped items
    #
    # See documentation in:
    # http://doc.scrapy.org/en/latest/topics/items.html
    from scrapy.item import Item, Field
    import scrapy
    
    
    class TutorialItem(scrapy.Item):
        # define the fields for your item here like:
        # name = scrapy.Field()
    
    #下面是我自己加的 class DmozItem(Item): title = Field() link = Field() desc = Field()

    制作爬虫

    爬虫还是老规矩,先爬再取。也就是说先获取整个网页的内容,然后取出你需要的部分

    在tutorialspiders目录下建立python文件,命名为dmoz_spider.py

    目前的代码如下

    from scrapy.spiders import Spider
    
    class DmozSpider(Spider):
        name = "dmoz"
        allowed_domains = ["dmoz.org"]
        start_urls= [
             "http://www.dmoz.org/Computers/Programming/Languages/Python/Books/",
             "http://www.dmoz.org/Computers/Programming/Languages/Python/Resources/"
        ]
        def parse(self,response):
            filename=response.url.split("/")[-2]
            open(filename,'wb').write(response.body)

    name是爬虫的名字,必须唯一

    allowed_domains是爬取的限制范围,意思只爬取该域名下的内容

    start_urls是爬取的url列表,子URLl将会从这些起始URL中继承性生成

    parse大概可以理解为对response的预处理

    好啦,爬虫写好了,然后运行,在tutorial目录下打开cmd窗口

    输入

    scrapy crawl dmoz

    哦豁,报错了

    娘度了下,是因为没有win32api这个模块

    我用的是python2.7 32位,所以下载pywin32-219.win32-py2.7.exe这个文件

    记得不要下错了,分32位和64位的,下载成64位的话会继续报

    dll load failed: 1% 不是有效的win32的

    错误

    配置好环境后,重新运行

    成功

    tutorial目录下多了book和Resources两个文件,这就是爬取下来的文件

  • 相关阅读:
    nodejs简单用法一
    初识ege图形库
    安装Microsoft Visual 2010 sp1回滚的错误,无Windows Installer目录
    MongoDB学习要点
    在java中,静态的内部类和非静态内部类的区别
    医院监护系统的问题定义及分析系统可行性及数据定义方法
    机票预订系统的问题定义及分析系统可行性
    银行储蓄系统问题:问题定义及分析系统可行性
    银行储蓄系统:问题定义及分析系统可行性
    软件开发的早期阶段为什么进行可行性研究?应该从哪些方面研究系统的可行性?
  • 原文地址:https://www.cnblogs.com/ronyjay/p/6515934.html
Copyright © 2011-2022 走看看