在anaconda下建立个人第一个scrapy爬虫——爬取dmoz网站某一网址下的目录的连接名称以及连接地址

这里我用的python工具是anaconda。css

1.首先建立一个scrapy工程:

打开anaconda promt命令行(注意这里不是使用cmd打开windows下的命令行),进入到须要建立工程的目录下,执行“scrapy startproject dmoz“”建立工程python

注意这里进入建立工程的目录时,不可直接"cd d:\python\workspace",须要将原来的目录返回到根目录下,才能够切换磁盘。json

建立完工程后,进入到工程目录下,能够看到以下目录结构:windows

进入到tuturial目录:app

2.在items.py文件中定义须要用到的变量

import scrapy

class DmozItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    title=scrapy.Field()
    link=scrapy.Field()
#    desc=scrapy.Filed()

3.进入到spider文件夹下,建立用于爬取数据的文件dmoz_spider.py

首先要肯定爬取网站的地址,这里咱们爬取dmoz网站中的新闻媒体及字典的目录网页:dom

http://dmoztools.net/Computers/Software/Shareware/News_and_Media/
http://dmoztools.net/Computers/Software/Shareware/Directories/

须要限定爬虫的爬取范围,不然爬取工做结束后,它可能会爬取未知网址的信息,限定爬虫范围的代码为:scrapy

allowed_domains=['dmoztools.net']

以“”http://dmoztools.net/Computers/Software/Shareware/Directories/为例展现网页中的信息”:ide

在这里会显示对应分类的诸多网址信息,咱们须要爬取的就是红色框标出来的网址名称以及对应的连接。函数

须要查看红色框对应代码中的位置:工具

能够看到连接对应的页面源码的位置为:div标签下的a标签。可是有不少div标签,又如何定位到a标签所在的div标签呢?经过标签对应的css样式来定位。

这里使用了xpath函数来爬取到指定标签的数据。

sites=sel.xpath('//div[@class="title-and-desc"]')

[@class="title-and-desc"]用于指定对应的div样式。

import scrapy

from tuturial.items import DmozItem

class DmozSpider(scrapy.Spider):
    name="dmoz"
    allowed_domains=['dmoztools.net']#爬取范围,防止爬虫在爬取完指定网页以后去爬取未知的网页
    #爬取的初始地址
    start_urls=[
            'http://dmoztools.net/Computers/Software/Shareware/News_and_Media/',
            'http://dmoztools.net/Computers/Software/Shareware/Directories/'
            ]
    
    #当根据爬取地址下载完内容后,会返回一个response,调用parse函数
    def parse(self,response):
#        filename=response.url.split('/')[-2]
#        with open(filename,'wb') as f:
#            f.write(response.body)
        sel=scrapy.selector.Selector(response)
        #查看网页中的审查元素,肯定须要爬取的数据在网页中的位置,根据所在的标签进行爬取
        #在咱们须要爬取的这两个网页中,列出的目录网址都在div标签中,可是网页中有不少div标签,须要根据div标签的css
        #样式进行进一步肯定,使用[@class=""]来指定对应的css样式
        sites=sel.xpath('//div[@class="title-and-desc"]')
        
        items=[]
        #对div中的每一条记录进行处理
        for site in sites:
            #实例化items.py指定的类,用于存储爬取到的数据
            item=DmozItem()
            #刚刚查询到的div下的a标签下的div标签下存储着对应的连接的名称
            item['title']=site.xpath('a/div/text()').extract()
            #刚刚查询到的div下的a标签下的href属性下存储着对应的连接
            item['link']=site.xpath('a/@href').extract()
#            desc=site.xpath('text()').extract()
            #将爬取出来的数据存储到items中
            items.append(item)
#            print(title,link)
        return items

注意须要引入到items文件:

from tuturial.items import DmozItem

该文件的name指定爬虫的名称,因此该名称必须是惟一的,这样才能够根据爬虫的名称找到对应的执行代码。

在anaconda prompt进入到爬虫工程下执行爬虫文件,并将爬取到的数据存储到json文件中

-o指定存储的文件,-t指定存储的格式。

在工程目录下就能够看到item.json文件了。

 

items.json文件的内容为:

对应的连接名称和网址就存储到文件中了。

相关文章
相关标签/搜索