這裏我用的python工具是anaconda。css
打開anaconda promt命令行(注意這裏不是使用cmd打開windows下的命令行),進入到須要建立工程的目錄下,執行「scrapy startproject dmoz「」建立工程python
注意這裏進入建立工程的目錄時,不可直接"cd d:\python\workspace",須要將原來的目錄返回到根目錄下,才能夠切換磁盤。json
建立完工程後,進入到工程目錄下,能夠看到以下目錄結構:windows
進入到tuturial目錄:app
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()
首先要肯定爬取網站的地址,這裏咱們爬取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文件的內容爲:
對應的連接名稱和網址就存儲到文件中了。