當前位置:成語大全網 - 新華字典 - 爬取餓了麽官網數據 scrapy

爬取餓了麽官網數據 scrapy

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文件中獲得了需要的數據。

爬取網站數據的簡單例子就這樣完成了,相信深入學習之後,肯定能實現非常強大的抓取數據功能。