早上剛配置好scrappy框架,下午就迫不及待的做了個小演示來測試。原來scrappy真的很厲害。感覺完全掌握之後,就沒有爬不上去的數據了,O(∩_∩)O哈哈~。
以下步驟基於scrapy的成功安裝和配置。
1.創建新的Scrapy項目
打開cmd控制臺界面?
輸入:scrapy startproject myScrapy
以下文件包含在創建的項目中:
__init__。py:項目的初始化文件;?
Items.py:項目的目標文件?
Pipelines.py:項目的管道文件?
項目的設置文件?
Spiders/:壹個存儲爬蟲代碼的文件?
蜘蛛/__init__。py:爬蟲的初始單詞文件。
2.定義項目
Items是保存抓取數據的容器,使用方法類似於python字典,提供了額外的保護機制,避免拼寫錯誤導致的未定義字段錯誤,類似於ORM中的映射關系。
這是items.py中的默認代碼:
進口scrapyclass mySpiderItem(scrapy。項目):
#name = scrapy。字段()
通行證12345
我們修改壹下:(我需要爬到數據?姓名、職業和詳細信息)
進口scrapyclass MyspiderItem(scrapy。項目):
#這是您需要攀爬的數據中包含的字段。
名字=刺兒頭。字段()
title = scrapy。字段()
info = scrapy。Field() pass123456789
3.創建爬網程序文件
妳在線嗎?蜘蛛/?在下創建壹個文件?demo_spider.py?。?
然後NotePad++打開該文件並添加以下代碼:
導入scrapy#引用myspider目錄下item.py中的myspideritemtemfrommyspider . item導入myspideritemclass demo _ spider(scrap . spider):
# Crawler名稱,它必須是唯壹的。
name = "演示"
#爬行動物的爬行領域(我想得到傳智的數據)
Allowed_domains = ["itcast.cn"] #開頭的URL列表,是第壹批請求的地址。
start _ URLs =[" http/channel/teacher . shtml "
] #pase方法負責解析返回的數據,獲取需要提取的數據項,生成需要進壹步處理的請求對象URL。
定義解析(自身,響應):
#采集的數據集
node _ list = response . XPath("//div[@ class = ' Li _ txt ']")
對於node_list中的節點:
Item = MyspiderItem() #。extract()將xpath對象轉換成Unicode字符串。
name = node.xpath("。/h3/text()"。提取()
title = node.xpath("。/h4/text()")。提取()
info = node.xpath("。/p/text()")。提取()
項目['名稱'] =名稱[0]
項目['標題'] =標題[0]
Item['info'] = info[0] #yield:獲取壹個項數據後暫停循環,然後交給流水線,再繼續循環。
產量項目1234567891011213141516171819202122232425262728
4.修改設置文件
打開setting.py文件,將ROBOTSTXT_OBEY改為false,避免某些網站禁止爬蟲抓取數據。
# Obey robots . txt rules robots txt _ Obey = false 12
取消ITEM_PIPELINES的註釋,它定義了管道的優先級。值越小,優先級越高。
ITEM _ PIPELINES = { ' Tencent . PIPELINES . Tencent pipeline ':300
}123
5.修改管道執行文件
這是默認的管道文件:
導入jsonclass MyspiderPipeline(對象):
def process_item(自身、項目、蜘蛛):
通過?12345
我們將其修改如下:
導入jsonclass MyspiderPipeline(對象):
def __init__(self):
Self.f = open ("demo.json "," WB+") #這個方法是必須的。
def process_item(自身、項目、蜘蛛):
content = json.dumps(dict(item),確保_ascii = False) +",\n "
self . f . write(content . encode(" utf-8 "))返回項目def colse_spider(self,spider):
self . f . close()1234567891011121314
添加__init__方法。第壹次執行管道事件時,創建demo.json文件並打開它。
添加colse_spider方法,以便在管道事件結束時關閉文件。
修改process_item方法,將Demo_Spider中獲得的項目數據保存到demo.json文件中。
啟動蜘蛛
在mySpider目錄中,創建壹個數據文件夾來存儲已爬網的數據文件。
輸入:mkdir data,然後:cd data/?
使用命令:scrapy抓取演示?
您可以看到執行完成的詳細信息。
demo.json文件中提供了所需的數據。
抓取網站數據的簡單例子就是這樣完成的。相信經過深入研究,壹定可以實現非常強大的數據抓取功能。