<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                首先還是先創建scrapy項目,當然這都是在你安裝scrapy之后啊,這個scrapy還是在linux系統下最省事,一行指令瞬間安裝,這酸爽。。。。。 言歸正傳啊,創建scrapy文件。 ~~~ <span style="font-size:14px;">scrapy startproject w3school</span> ~~~ 之后可以查看一下,這個文件的結構,上一次抓取天氣的時候還記得嗎,我們采用的是tree命令。 ~~~ <span style="font-size:14px;">tree w3school</span> ~~~ 你就能看見一個樹形的文件目錄。 現在我們開始編寫爬蟲中的文件,其實需要編寫的只有4個文件,items.py pipelines.py setting.py spider.py。現在只是最初級啊,因為現在我還只是一個菜鳥,哇咔咔。 items文件是一個容器,所謂Item容器就是將在網頁中獲取的數據結構化保存的數據結構,類似于python中字典。按我的理解就是你需要提取什么就寫一個Field()。當然這個理解還是很初步的啊,但我堅信在實踐中成長才是最快速的,剛開始的時候就是要不求甚解,用的次數多了,隨著深入的學習自然就明白了。 ~~~ import scrapy class W3SchoolItem(scrapy.Item): title = scrapy.Field() link = scrapy.Field() desc = scrapy.Field() ~~~ 之后我們可以編寫爬蟲文件或者pipelines文件都可以。pipelines文件主要完成數據的查重、丟棄,驗證item中數據,將得到的item數據保存等工作。? 也就是說抓取的數據都是會返回到pipilines文件中.爬蟲文件中會有一個parse()函數,最后有一個return items會返回一個列表。其中的codec模塊是專門用來轉換編碼用的。 process_item函數參數的含義: item (Item object) – 由parse方法返回的Item對象 spider (BaseSpider object) – 抓取到這個Item對象對應的爬蟲對象 ~~~ # -*- coding: utf-8 -*- import json import codecs # Define your item pipelines here # # Don't forget to add your pipeline to the ITEM_PIPELINES setting # See: http://doc.scrapy.org/en/latest/topics/item-pipeline.html class W3SchoolPipeline(object): def __init__(self): self.file = codecs.open('W3School_data.json','wb',encoding = 'utf-8')#初始化創建一個W3School_data.json的文件 def process_item(self, item, spider): line = json.dumps(dict(item)) + '\n'#對數據類型進行編碼 print line self.file.write(line.decode("unicode_escape")) return item ~~~ 寫完pipelines文件之后就一定要在setting文件中添加一行代碼。從Spider的parse返回的Item數據將依次被ITEM_PIPELINES列表中的Pipeline類處理。 ~~~ ITEM_PIPELINES = {'w3school.pipelines.W3SchoolPipeline':300} ~~~ 最后開始編寫我們的爬蟲文件,就是從網頁源代碼中提取我們想要的信息。scrapy官方推薦使用xpath來提取,比較方便快捷。爬蟲文件中有三個參數一定要寫,一個是name這個相當于爬蟲的代號,因為爬蟲你可以寫很多個,但是調用的時候只能調用一個爬蟲為你工作,name在調用的時候會用的到。還有一個allowed_domains屬性,scrapy有一個offsite機制,即是否抓其他域名,需要將allowed_domains屬性添加上sina.com.cn。最后還有一個start_urls屬性,包含了Spider在啟動時進行爬取的url列表。 因此,第一個被獲取到的頁面將是其中之一。 后續的URL則從初始的URL獲取到的數據中提取。 scrapy還提供了log功能,具體我也不知道它有什么功能,應該是可以捕捉scrapy的日志。里面的msg()函數可以記錄信息,然后會將信息顯示在終端窗口中,有點C++里messagebox的意思。 Scrapy提供5層logging級別: ?? :data:`~scrapy.log.CRITICAL` - 嚴重錯誤(critical) ?? :data:`~scrapy.log.ERROR` - 一般錯誤(regular errors) ?? :data:`~scrapy.log.WARNING` - 警告信息(warning messages) ?? :data:`~scrapy.log.INFO` - 一般信息(informational messages) ?? :data:`~scrapy.log.DEBUG` - 調試信息(debugging messages) ~~~ from scrapy.spider import Spider from scrapy.selector import Selector from scrapy import log from w3school.items import W3SchoolItem class W3schoolSpider(Spider): name = 'w3school' allowed_domains = ["w3school.com.cn"] start_urls = ['http://www.w3school.com.cn/'] def parse(self,response): sel = Selector(response) sites = sel.xpath('//div[@id="navfirst"]/ul[1]/li')#找到id=navfirst的div,找到其中ul里面li里的信息。 items = [] for site in sites: item = W3SchoolItem()#每個item都相當于一個字典 title = site.xpath('a/text()').extract()#提取<a></a>中間的內容 link = site.xpath('a/@href').extract()#提取<a>中href的內容 desc = site.xpath('a/@title').extract()#提取<a>中title的內容 item['title'] = [t.encode('utf-8') for t in title] item['link'] = [l.encode('utf-8') for l in link] item['desc'] = [d.encode('utf-8')for d in desc] items.append(item) log.msg("Appending item...",level = "INFO") log.msg("Append done.",level = 'INFO') return items ~~~ 最后我們可以檢驗一下我們的勞動成果啦,哇咔咔,先進入w3school文件運行下列的代碼就ok了。 ~~~ scrapy crawl w3school ~~~ 之后文件夾中會出現一個W3School_data.json的文件里面的內容就是。其實你也可以抓取其他的東西,只要更改xpath的內容就ok了。 ~~~ {"title": ["HTML 系列教程"], "link": ["/h.asp"], "desc": ["HTML 系列教程"]} {"title": ["瀏覽器腳本"], "link": ["/b.asp"], "desc": ["瀏覽器腳本教程"]} {"title": ["服務器腳本"], "link": ["/s.asp"], "desc": ["服務器腳本教程"]} {"title": ["ASP.NET 教程"], "link": ["/d.asp"], "desc": ["ASP.NET 教程"]} {"title": ["XML 系列教程"], "link": ["/x.asp"], "desc": ["XML 系列教程"]} {"title": ["Web Services 系列教程"], "link": ["/ws.asp"], "desc": ["Web Services 系列教程"]} {"title": ["建站手冊"], "link": ["/w.asp"], "desc": ["建站手冊"]} ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看