《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()

猜你喜欢

转载自www.cnblogs.com/chengchengaqin/p/9509899.html
今日推荐