scrapy在前面的博客里已经介绍过,可以用来开发爬取网页上的内容的程序,很方便。但是作为一个这样的框架,需要按照框架自己的月约定来开发,如果较长时间不把这个框架拿出来用用,这样慢慢的就会遗忘它的用法,因此,今天选择了Wnn上的新闻网页,来练习做网页爬虫。

打开笔记本电脑,这台笔记本电脑有2个月左右没有开机了,启动之后遇到了Mysql-server升级的一些问题,花了好大的功夫才解决掉,接下来又准备Python3的环境,安装Pycharm以及scrapy,相关的步骤在上一篇中写的比较完整,可以查看一下。

建立爬虫的项目

scrapy startproject nphot_spider
cd nphot_spider
scrapy genderspider wnn www.world-nuclear-news.org

这样一个名为wnn的爬虫项目就算建好了。
在目录spiders下有一个wnn.py的文件,内容如下:

import scrapy

from nphot_spider.items import NphotSpiderItem,NphotSpiderItemone


class WnnSpider(scrapy.Spider):
    name = 'wnn'
    allowed_domains = ['www.world-nuclear-news.org']
    start_urls = ['http://www.world-nuclear-news.org/search.aspx?searchtext=1&searchmode=anyword']

    def parse(self, response):
        s = response.xpath('//*[@id="ctl00_ContentPlaceHolder1_PlaceHolderZones_lt_SearchResults_SmartSearchResults_srchResults_pnlSearchResults"]')
        urls =[]
        urls_meta = s.css("div div a::attr(href)").extract()
        for url in urls_meta:
            urls.append(response.urljoin(url))
        for d in s.xpath("div"):
            item = NphotSpiderItemone()
            # self.logger.info(d.css("div div a::attr(href)").extract())
            url = response.urljoin(d.css("div a::attr(href)").extract_first())
            item['url'] = url
            item['category'] = d.css("p.small strong::text").extract()
            item['ts']=d.css("p.small::text").extract()[1]
            print(item)
            #下一步可以将这三个字段保存在数据库

        items = NphotSpiderItem()
        items['urls'] = urls
        yield  items

items.py内容如下:

import scrapy


class NphotSpiderItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    urls = scrapy.Field()


class NphotSpiderItemone(scrapy.Item):
    url = scrapy.Field()
    category = scrapy.Field()
    ts = scrapy.Field()

pipelines.py代码如下:

class NphotSpiderPipeline(object):
    def process_item(self, item, spider):
        for url in item['urls']:
            print("%s" % url)
        return item

在settings.py中将如下注释去掉:

ITEM_PIPELINES = {
   'nphot_spider.pipelines.NphotSpiderPipeline': 300,
}

以上代码可以启动一个简单的网页爬虫程序:
在项目目录下执行命令:

scrapy crawl wnn

界面会显示scrapy的日志。在将相应的保存到数据库的代码补全之后,相应的数据也将保存到数据库中。

标签: scrapy

仅有一条评论

  1. 技术控哈。。不错。

添加新评论