一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Scrapy之路第一篇

 stoneccf 2019-01-14

構建自己的數(shù)據(jù)王國

  • 新建項目
  • 明確目標
  • 制作爬蟲
  • 保存數(shù)據(jù)

一、新建項目(scrapy startproject)

  • 在爬取前,必須創(chuàng)建一個新的scrapy項目,進入自定義的項目目錄中,運行下列命令:
scrapy startproject myspider
  • 1
  • 其中,myspider為項目名稱,可以看到將會創(chuàng)建一個myspider文件夾,目錄結構大致如下:
    myspider目錄結構

這些文件的主要作用列舉如下:

  1. scrapy.cfg:項目的配置文件
  2. myspider/:項目的python模塊,將會從這里引用代碼
  3. myspider/items.py:項目的目標文件
  4. myspider/pipelines.py:項目的管道文件
  5. myspider/settings.py:項目的設置文件
  6. myspider/spiders/:存儲爬蟲代碼目錄

二、 明確目標(myspider/items.py)

準備抓取網(wǎng)站http://www./channel/teacher.shtml網(wǎng)站里的所有講師的姓名、職稱和個人信息。

  1. Item用來定義結構化數(shù)據(jù)字段,用以保存爬取到的數(shù)據(jù),有點像python中的dict,但是提供了一些額外的保護減少錯誤。
  2. 可以在myspider/items.py中創(chuàng)建一個Item類,并且通過在Item類中繼續(xù)定義多個Field類(該類是繼承了dict)來完善該Item類
  3. 接下來,創(chuàng)建一個ItcastItem類,和構建item模型(model)。
import scrapy
class ItcastItem(scrapy.Item):
    name = scrapy.Field()
    level = scrapy.Field()
    info = scrapy.Field()
  • 1
  • 2
  • 3
  • 4
  • 5

三、 制作爬蟲(spiders/itcastspider.py)

爬蟲功能要分兩步:
1、爬數(shù)據(jù)

  • 在當前目錄下輸入命令,將在myspider/spiders目錄下創(chuàng)建一個名為itcast的爬蟲,并指定爬取域的范圍:
scrapy genspider itcast ""
  • 1
  • 打開myspider/spiders目錄里的itcast.py,默認增加了下列代碼:
import scrapy

class ItcastSpider(scrapy.Spider):
    name = 'itcast'
    allowed_domains = ['']
    start_urls = ['http://www./channel/teacher.shtml']

    def parse(self, response):
        pass
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

其實也可以由我們自行創(chuàng)建itcast.py并編寫上面的代碼,只不過使用命令可以免去編寫固定代碼的麻煩。

要建立一個spider,你必須用scrapy.spider類創(chuàng)建一個子類,并確定了三個強制的屬性和一個方法。

  • name = ‘itcast’:這個爬蟲的識別名稱,必須是唯一的,在不同的爬蟲必須定義不同的名字
  • allow_domains=[]:是搜索的域名范圍,也就是爬蟲的約束區(qū)域,規(guī)定爬蟲只爬取這個域名下的網(wǎng)頁,不存在的URL會被忽略
  • start_urls=[]:爬取的URL元祖/列表,爬蟲從這里開始抓取數(shù)據(jù),所以,第一次下載的數(shù)據(jù)將會從這些urls開始,其他子URL將會從這些起始URL中繼承性生成。
  • parse(self,response):解析的方法,每個初識URL完成下載后將被調(diào)用,調(diào)用的時候傳入從每一個URL傳回的Response對象來作為唯一參數(shù)主要作用如下:
    • 負責解析返回的網(wǎng)頁數(shù)據(jù)(reponse.body),提取結構化數(shù)據(jù)(生成item)
    • 生成需要下一頁的URL請求
  • 將start_urls的值修改為需要爬取的第一個url
start_urls=['http://www./channel/teacher.shtml']
  • 1
  • 修改parse()方法
def parse(self, response):
    filename="teacher.html"
    with open(filename,'wb') as f:
        f.write(response.body)
  • 1
  • 2
  • 3
  • 4
  • 然后在myspider/myspider目錄下執(zhí)行
scrapy crawl itcast
  • 1
  • 運行后,打印的日志出現(xiàn)[scrapy.core.engine] INFO: Spider closed (finished),代表執(zhí)行完成。

2、取數(shù)據(jù)

  • 爬取整個網(wǎng)頁源碼完畢,接下來是提取過程,首先觀察頁面源碼:
    頁面源碼
<div class="li_txt">
    <h3> xxx </h3>
    <h4> xxxxx </h4>
    <p> xxxxxxx </p>
  • 1
  • 2
  • 3
  • 4
  • 之前在myspider/items.py里定義了一個MyspiderItem類,這里引入進來
from myspider.items import MyspiderItem
  • 1
  • 然后將我們得到的數(shù)據(jù)封裝到一個MyspiderItem對象中,可以保存每個老師的屬性:
def parse(self, response):
     # filename="teacher.html"
     # with open(filename,'wb') as f:
     #     f.write(response.body)
     items=[]
     for each in response.xpath("http://div[@class='li_txt']"):
         item=MyspiderItem()
         name=each.xpath("h3/text()").extract()[0]
         level=each.xpath("h4/text()").extract()[0]
         info=each.xpath("p/text()").extract()[0]
         item['name']=name
         item['level']=level
         item['info']=info
         items.append(item)
     return items
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

四、 保存數(shù)據(jù)

我們暫時先不處理管道。
scrapy保存信息的最簡單的方法主要有四中,-o輸出指定格式的文件,命令如下:

#json格式,默認為unicode編碼
scrapy crawl itcast -o teachers.json
scrapy crawl itcast -o teachers.jsonl
scrapy crawl itcast -o teachers.csv
scrapy crawl itcast -o teachers.xml
  • 1
  • 2
  • 3
  • 4
  • 5

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    亚洲黄片在线免费小视频| 久久青青草原中文字幕| 国产又大又硬又粗又湿| 男人把女人操得嗷嗷叫| 色一情一乱一区二区三区码| 国产农村妇女成人精品| 国产精品二区三区免费播放心| 在线免费不卡亚洲国产| 香港国产三级久久精品三级| 91久久精品国产成人| 亚洲国产精品久久琪琪| 日韩无套内射免费精品| 一区二区三区日韩经典| 久久婷婷综合色拍亚洲| 中文精品人妻一区二区| 欧美熟妇喷浆一区二区| 中文字幕有码视频熟女| 男生和女生哪个更好色| 日韩一级毛一欧美一级乱| 好吊一区二区三区在线看| 九九热视频网在线观看| 熟女一区二区三区国产| 亚洲第一区二区三区女厕偷拍| 久久99夜色精品噜噜亚洲av| 日本一本不卡免费视频| 国产精品国三级国产专不卡| 伊人久久五月天综合网| 午夜福利直播在线视频| 麻豆果冻传媒一二三区| 深夜视频在线观看免费你懂 | 99精品国产自在现线观看| 欧美日本亚欧在线观看| 又大又紧又硬又湿又爽又猛| 日韩一区二区三区嘿嘿| 婷婷基地五月激情五月| 国产精品一区日韩欧美| 久热在线视频这里只有精品| 少妇人妻无一区二区三区| 日本淫片一区二区三区| 日韩aa一区二区三区| 最好看的人妻中文字幕|