標籤:topic 部分 mode 環境 self pen 網域名稱 body computers
用Scrapy做爬蟲分為四步
- 建立項目 (Project):建立一個新的爬蟲項目
- 明確目標(Items):明確你想要抓取的目標
- 製作爬蟲(Spider):製作爬蟲開始爬取網頁
- 儲存內容(Pipeline):設計管道儲存爬取內容
上一章節做了建立項目,接著用上一次建立的項目來爬取網頁
網上很多教程都是用的dmoz.org這個網站來做實驗,所以我也用這個來做了實驗
明確目標
在Scrapy中,items是用來載入抓取內容的容器
我們想要的內容是
- 名稱(name)
- 連結(url)
- 描述(description)
在tutorial目錄下會有items.py檔案,在預設的代碼後面添加上我們的代碼
# -*- coding: utf-8 -*-# Define here the models for your scraped items## See documentation in:# http://doc.scrapy.org/en/latest/topics/items.htmlfrom scrapy.item import Item, Fieldimport scrapyclass TutorialItem(scrapy.Item): # define the fields for your item here like: # name = scrapy.Field()
#下面是我自己加的class DmozItem(Item): title = Field() link = Field() desc = Field()
製作爬蟲
爬蟲還是老規矩,先爬再取。也就是說先擷取整個網頁的內容,然後取出你需要的部分
在tutorial\spiders目錄下建立python檔案,命名為dmoz_spider.py
目前的代碼如下
from scrapy.spiders import Spiderclass DmozSpider(Spider): name = "dmoz" allowed_domains = ["dmoz.org"] start_urls= [ "http://www.dmoz.org/Computers/Programming/Languages/Python/Books/", "http://www.dmoz.org/Computers/Programming/Languages/Python/Resources/" ] def parse(self,response): filename=response.url.split("/")[-2] open(filename,‘wb‘).write(response.body)
name是爬蟲的名字,必須唯一
allowed_domains是爬取的限制範圍,意思只爬取該網域名稱下的內容
start_urls是爬取的url列表,子URLl將會從這些起始URL中繼承性產生
parse大概可以理解為對response的預先處理
好啦,爬蟲寫好了,然後運行,在tutorial目錄下開啟cmd視窗
輸入
scrapy crawl dmoz
哦豁,報錯了
娘度了下,是因為沒有win32api這個模組
我用的是python2.7 32位,所以下載pywin32-219.win32-py2.7.exe這個檔案
記得不要下錯了,分32位和64位的,下載成64位的話會繼續報
dll load failed: 1% 不是有效win32的
錯誤
配置好環境後,重新運行
成功
tutorial目錄下多了book和Resources兩個檔案,這就是爬取下來的檔案
爬蟲7:Scrapy-耙梳頁