zoukankan      html  css  js  c++  java
  • 《python网络数据采集》读后感 第三章:开始采集2

    1.Scrapy采集:

    网络爬虫的挑战之一是你经常需要不断地重复一些简单任务:找出页面上的所有链接, 区分内链与外链,跳转到新的页面。

    Scrapy 就是一个帮你大幅度降低网页链接查找和识别工作复杂度的 Python 库,它可以 让你轻松地采集一个或多个域名的信息。

    a.articleSpider.py:

     1 from scrapy.selector import Selector
     2 from scrapy import Spider
     3 from wikiSpider.wikiSpider.items import Article
     4 
     5 class ArticleSpider(Spider):
     6     """
     7     这个类的名称(ArticleSpider)与爬虫文件的名称(wikiSpider)是不同的,
     8     这个类只是 在 wikiSpider 目录里的一员,仅仅用于维基词条页面的采集。
     9     对一些信息类型较多的大网站,你可能会为每种信息(如博客的博文、图书出版发行信息、专栏文章等)
    10     设置独立的 Scrapy 条目,每个条目都有不同的字段,但是所有条目都在同一个 Scrapy 项目里运行。
    11     """
    12     name = "article"
    13     allowed_domains = ["en.wikipedia.org"]
    14     start_urls = ["http://en.wikipedia.org/wiki/Main_Page",
    15                     "http://en.wikipedia.org/wiki/Python_%28programming_language%29"]
    16 
    17     def parse(self, response):
    18         item = Article()
    19         title = response.xpath('//h1/text()')[0].extract()
    20         print("Title is : " + title)
    21         item['item'] = title
    22         return item

    这个爬虫先进入 start_urls 里面的两个页面,收集信息,然后停止。虽然这个爬虫很简 单,但是如果你有许多 URL 需要采集,Scrapy 这种用法会非常适合。

    为了更加的完善,定义一些规则让Scrapy在每个页面查找URL链接:

     1 from scrapy.selector import Selector
     2 from scrapy import Spider
     3 from wikiSpider.wikiSpider.items import Article
     4 from scrapy.contrib.spiders import CrawlSpider, Rule
     5 from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
     6 
     7 class ArticleSpider(CrawlSpider):
     8     """
     9     这个类的名称(ArticleSpider)与爬虫文件的名称(wikiSpider)是不同的,
    10     这个类只是 在 wikiSpider 目录里的一员,仅仅用于维基词条页面的采集。
    11     对一些信息类型较多的大网站,你可能会为每种信息(如博客的博文、图书出版发行信息、专栏文章等)
    12     设置独立的 Scrapy 条目,每个条目都有不同的字段,但是所有条目都在同一个 Scrapy 项目里运行。
    13     """
    14     name = "article"
    15     allowed_domains = ["en.wikipedia.org"]
    16     start_urls = ["http://en.wikipedia.org/wiki/Python_%28programming_language%29"]
    17     rules = [Rule(SgmlLinkExtractor(allow=('(/wiki/)((?!:).)*$'),),
    18                   callable="parse_item", follow=True)]
    19 
    20     def parse_item(self, response):
    21         item = Article()
    22         title = response.xpath('//h1/text()')[0].extract()
    23         print("Title is : " + title)
    24         item['title'] = title
    25         return item

    b. items.py:

     1 # -*- coding: utf-8 -*-
     2 
     3 # Define here the models for your scraped items
     4 #
     5 # See documentation in:
     6 # https://doc.scrapy.org/en/latest/topics/items.html
     7 
     8 import scrapy
     9 from scrapy import Item,Field
    10 
    11 #每个item(条目)对象表示网站上的一个页面
    12 class WikispiderItem(scrapy.Item):
    13     # define the fields for your item here like:
    14     # name = scrapy.Field()
    15     pass
    16 
    17 class Article(Item):
    18     #name = scrapy.Field()
    19     title = Field()
  • 相关阅读:
    第十一周学习总结
    个人冲刺——(六)
    第二阶段冲刺—第二天
    软件工程第十四周总结
    第二阶段冲刺—第一天
    大道至简阅读笔记02
    输入法用户体验评价
    软件工程第十三周总结
    人机交互-水王
    大道至简阅读笔记01
  • 原文地址:https://www.cnblogs.com/chengchengaqin/p/9509899.html
Copyright © 2011-2022 走看看