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两个文件,这就是爬取下来的文件

  • 相关阅读:
    再次或多次格式化导致namenode的ClusterID和datanode的ClusterID之间不一致的问题解决办法
    Linux安装aria2
    POJ 3335 Rotating Scoreboard 半平面交
    hdu 1540 Tunnel Warfare 线段树 区间合并
    hdu 3397 Sequence operation 线段树 区间更新 区间合并
    hud 3308 LCIS 线段树 区间合并
    POJ 3667 Hotel 线段树 区间合并
    POJ 2528 Mayor's posters 贴海报 线段树 区间更新
    POJ 2299 Ultra-QuickSort 求逆序数 线段树或树状数组 离散化
    POJ 3468 A Simple Problem with Integers 线段树成段更新
  • 原文地址:https://www.cnblogs.com/ronyjay/p/6515934.html
Copyright © 2011-2022 走看看