Scrapy框架的初步運用
上午剛配置好scrapy框架,下午我就迫不及待的做了壹個小demo來測試壹下,結果證明scrapy真是太強大了。我感覺等對它掌握到爐火純青的地步後,就沒有什麽數據是爬不到的了,O(∩_∩)O哈哈~。
以下步驟是建立在成功安裝並配置好scrapy的基礎上的.
1.新建壹個Scrapy項目
打開cmd控制臺界面?
輸入:scrapy startproject myScrapy
下面是創建的工程中所包含的文件:
__init__.py:項目的初始化文件;?
items.py:項目的目標文件?
pipelines.py:項目的管道文件?
settings.py:項目的設置文件?
spiders/:存放爬蟲代碼的文件?
spiders/__init__.py:爬蟲的初始話文件
2.定義Item
Items是保存爬取到的數據的容器,其使用方法和python字典類似, 它提供了額外保護機制來避免拼寫錯誤導致的未定義字段錯誤,這類似與ORM中的映射關系。
這是items.py中的默認代碼:
import scrapyclass mySpiderItem(scrapy.Item):
#name = scrapy.Field()
pass12345
我們對其進行修改:(我需要爬到數據為?姓名、職業和詳細信息)
import scrapyclass MyspiderItem(scrapy.Item):
# 這是妳需要爬到的數據所包含的字段
name = scrapy.Field()
title = scrapy.Field()
info = scrapy.Field() pass123456789
3.創建爬蟲文件
在?spiders/?下創建文件?demo_spider.py?.?
然後NotePad++打開該文件,添加如下代碼:
import scrapy#引用mySpider目錄下的item.py中的MyspiderItemfrom mySpider.items import MyspiderItemclass Demo_Spider(scrapy.Spider):
#爬蟲名,該值必須唯壹
name = "demo"
#爬蟲的爬取域(我要拿傳智的數據)
allowed_domains = ["itcast.cn"] #起始的URL列表,也就是第壹批請求的地址
start_urls = [ "htt/channel/teacher.shtml"
] #pase方法負責解析返回的數據response data、獲得要提取的數據item,以及生成需要進壹步處理URL的Request對象。
def parse(self, response):
#獲取的數據集
node_list = response.xpath("//div[@class='li_txt']")
for node in node_list:
item = MyspiderItem() #.extract()將xpath對象轉換為Unicode字符串
name = node.xpath("./h3/text()").extract()
title = node.xpath("./h4/text()").extract()
info = node.xpath("./p/text()").extract()
item['name'] = name[0]
item['title'] = title[0]
item['info'] = info[0] #yield :獲得壹個item數據後暫停循環,然後將它交給管道,之後繼續進行循環
yield item12345678910111213141516171819202122232425262728293031
4.修改setting文件
打開setting.py文件,修改ROBOTSTXT_OBEY為false,避免某些網站禁止爬蟲導致不能爬取數據。
# Obey robots.txt rulesROBOTSTXT_OBEY = False12
取消ITEM_PIPELINES的的註釋,該項定義了管道的優先級,數值越小優先級越高
ITEM_PIPELINES = { 'Tencent.pipelines.TencentPipeline': 300,
}123
5.修改管道執行文件
這是默認的管道文件:
import jsonclass MyspiderPipeline(object):
def process_item(self, item, spider):
pass ? 12345
我們修改它,如下:
import jsonclass MyspiderPipeline(object):
def __init__(self):
self.f = open("demo.json","wb+") #該方法是必要的
def process_item(self, item, spider):
content = json.dumps(dict(item),ensure_ascii = False) + ",\n"
self.f.write(content.encode("utf-8")) return item def colse_spider(self,spider):
self.f.close()1234567891011121314
添加__init__方法,管道事件第壹次執行時,創建demo.json文件,並打開。
添加colse_spider方法,管道事件結束時,關閉文件。
修改process_item方法,將Demo_Spider中獲得的item數據存到demo.json文件中。
5.啟動spider
在mySpider目錄中,創建壹個data文件夾,用來存放爬取的數據文件。
輸入:mkdir data,然後:cd data/?
使用命令:scrapy crawl demo?
可以看到,執行完成的詳細信息。
demo.json文件中獲得了需要的數據。
爬取網站數據的簡單例子就這樣完成了,相信深入學習之後,肯定能實現非常強大的抓取數據功能。