在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文件的內容爲:

對應的連接名稱和網址就存儲到文件中了。

相關文章
相關標籤/搜索