最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Scrapy抓取京東商品、豆瓣電影及代碼分享

 更新時(shí)間:2017年11月23日 08:47:05   作者:alexander.bruce.lee  
Scrapy,Python開發(fā)的一個(gè)快速、高層次的屏幕抓取和web抓取框架,用于抓取web站點(diǎn)并從頁面中提取結(jié)構(gòu)化的數(shù)據(jù)。Scrapy用途廣泛,可以用于數(shù)據(jù)挖掘、監(jiān)測(cè)和自動(dòng)化測(cè)試。

 1.scrapy基本了解

  Scrapy是一個(gè)為了爬取網(wǎng)站數(shù)據(jù),提取結(jié)構(gòu)性數(shù)據(jù)而編寫的應(yīng)用框架??梢詰?yīng)用在包括數(shù)據(jù)挖掘, 信息處理或存儲(chǔ)歷史數(shù)據(jù)等一系列的程序中。其最初是為了頁面抓取(更確切來說,網(wǎng)絡(luò)抓取)所設(shè)計(jì)的,也可以應(yīng)用在獲取API所返回的數(shù)據(jù)(比如Web Services)或者通用的網(wǎng)絡(luò)爬蟲。

  Scrapy也能幫你實(shí)現(xiàn)高階的爬蟲框架,比如爬取時(shí)的網(wǎng)站認(rèn)證、內(nèi)容的分析處理、重復(fù)抓取、分布式爬取等等很復(fù)雜的事。

Scrapy主要包括了以下組件:

  • 引擎(Scrapy): 用來處理整個(gè)系統(tǒng)的數(shù)據(jù)流處理, 觸發(fā)事務(wù)(框架核心)
  • 調(diào)度器(Scheduler): 用來接受引擎發(fā)過來的請(qǐng)求, 壓入隊(duì)列中, 并在引擎再次請(qǐng)求的時(shí)候返回. 可以想像成一個(gè)URL(抓取網(wǎng)頁的網(wǎng)址或者說是鏈接)的優(yōu)先隊(duì)列, 由它來決定下一個(gè)要抓取的網(wǎng)址是什么, 同時(shí)去除重復(fù)的網(wǎng)址
  • 下載器(Downloader): 用于下載網(wǎng)頁內(nèi)容, 并將網(wǎng)頁內(nèi)容返回給蜘蛛(Scrapy下載器是建立在twisted這個(gè)高效的異步模型上的)
  • 爬蟲(Spiders): 爬蟲是主要干活的, 用于從特定的網(wǎng)頁中提取自己需要的信息, 即所謂的實(shí)體(Item)。用戶也可以從中提取出鏈接,讓Scrapy繼續(xù)抓取下一個(gè)頁面
  • 項(xiàng)目管道(Pipeline): 負(fù)責(zé)處理爬蟲從網(wǎng)頁中抽取的實(shí)體,主要的功能是持久化實(shí)體、驗(yàn)證實(shí)體的有效性、清除不需要的信息。當(dāng)頁面被爬蟲解析后,將被發(fā)送到項(xiàng)目管道,并經(jīng)過幾個(gè)特定的次序處理數(shù)據(jù)。
  • 下載器中間件(Downloader Middlewares): 位于Scrapy引擎和下載器之間的框架,主要是處理Scrapy引擎與下載器之間的請(qǐng)求及響應(yīng)。
  • 爬蟲中間件(Spider Middlewares): 介于Scrapy引擎和爬蟲之間的框架,主要工作是處理蜘蛛的響應(yīng)輸入和請(qǐng)求輸出。
  • 調(diào)度中間件(Scheduler Middewares): 介于Scrapy引擎和調(diào)度之間的中間件,從Scrapy引擎發(fā)送到調(diào)度的請(qǐng)求和響應(yīng)。

  Scrapy運(yùn)行流程大概如下:
1.首先,引擎從調(diào)度器中取出一個(gè)鏈接(URL)用于接下來的抓取

2.引擎把URL封裝成一個(gè)請(qǐng)求(Request)傳給下載器,下載器把資源下載下來,并封裝成應(yīng)答包(Response)

3.然后,爬蟲解析Response

4.若是解析出實(shí)體(Item),則交給實(shí)體管道進(jìn)行進(jìn)一步的處理。

5.若是解析出的是鏈接(URL),則把URL交給Scheduler等待抓取

  2.安裝scrapy

      虛擬環(huán)境安裝:
    sudo pip install virtualenv #安裝虛擬環(huán)境工具
    virtualenv ENV #創(chuàng)建一個(gè)虛擬環(huán)境目錄
    source ./ENV/bin/active #激活虛擬環(huán)境
    pip install Scrapy #驗(yàn)證是否安裝成功
    pip list #驗(yàn)證安裝

    可以如下測(cè)試:

    scrapy bench

  3.使用scrapy

      在抓取之前, 你需要新建一個(gè)Scrapy工程. 進(jìn)入一個(gè)你想用來保存代碼的目錄,然后執(zhí)行: 

         $ scrapy startproject tutorial

    這個(gè)命令會(huì)在當(dāng)前目錄下創(chuàng)建一個(gè)新目錄 tutorial, 它的結(jié)構(gòu)如下:

|____scrapy.cfg
|____tutorial
| |______init__.py
| |______init__.pyc
| |____items.py
| |____items.pyc
| |____pipelines.py
| |____settings.py
| |____settings.pyc
| |____spiders
| | |______init__.py
| | |______init__.pyc
| | |____example.py
| | |____example.pyc

 

  這些文件主要是:

scrapy.cfg: 項(xiàng)目配置文件
tutorial/: 項(xiàng)目python模塊, 之后您將在此加入代碼
tutorial/items.py: 項(xiàng)目items文件
tutorial/pipelines.py: 項(xiàng)目管道文件
tutorial/settings.py: 項(xiàng)目配置文件
tutorial/spiders: 放置spider的目錄

  3.1. 定義Item

  items是將要裝載抓取的數(shù)據(jù)的容器,它工作方式像 python 里面的字典,但它提供更多的保護(hù),比如對(duì)未定義的字段填充以防止拼寫錯(cuò)誤通過創(chuàng)建scrapy.Item類, 并且定義類型為 scrapy.Field 的類屬性來聲明一個(gè)Item.我們通過將需要的item模型化。在 tutorial 目錄下的 items.py 文件中編輯。

  3.2. 編寫Spider

  Spider 是用戶編寫的類, 用于從一個(gè)域(或域組)中抓取信息, 定義了用于下載的URL的初步列表, 如何跟蹤鏈接,以及如何來解析這些網(wǎng)頁的內(nèi)容用于提取items。
要建立一個(gè) Spider,繼承 scrapy.Spider 基類,并確定三個(gè)主要的、強(qiáng)制的屬性:
name:爬蟲的識(shí)別名,它必須是唯一的,在不同的爬蟲中你必須定義不同的名字.
start_urls:包含了Spider在啟動(dòng)時(shí)進(jìn)行爬取的url列表。因此,第一個(gè)被獲取到的頁面將是其中之一。后續(xù)的URL則從初始的URL獲取到的數(shù)據(jù)中提取。我們可以利用正則表達(dá)式定義和過濾需要進(jìn)行跟進(jìn)的鏈接。
parse():是spider的一個(gè)方法。被調(diào)用時(shí),每個(gè)初始URL完成下載后生成的 Response 對(duì)象將會(huì)作為唯一的參數(shù)傳遞給該函數(shù)。該方法負(fù)責(zé)解析返回的數(shù)據(jù)(response data),提取數(shù)據(jù)(生成item)以及生成需要進(jìn)一步處理的URL的 Request 對(duì)象。

這個(gè)方法負(fù)責(zé)解析返回的數(shù)據(jù)、匹配抓取的數(shù)據(jù)(解析為 item )并跟蹤更多的 URL。

  在 /tutorial/tutorial/spiders 目錄下創(chuàng)建

  example.py

  3.3 .爬取

  到項(xiàng)目根目錄, 然后運(yùn)行命令

  $ scrapy crawl example

  完整代碼參考:https://github.com/AlexanLee/Spider 其中有題目中抓取京東和豆瓣的方法。

相關(guān)文章

  • 基于Python實(shí)現(xiàn)計(jì)算納什均衡的示例詳解

    基于Python實(shí)現(xiàn)計(jì)算納什均衡的示例詳解

    納什均衡是一種博弈論中的概念,它描述了一種平衡狀態(tài),其中每個(gè)參與者都不能通過獨(dú)立改變其決策來提高自己的利益。本文就來用Python中的Nashpy和PuLP實(shí)現(xiàn)計(jì)算納什均衡,感興趣的可以了解一下
    2023-02-02
  • python 表格打印代碼實(shí)例解析

    python 表格打印代碼實(shí)例解析

    這篇文章主要介紹了python 表格打印代碼實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • Python實(shí)現(xiàn)一個(gè)轉(zhuǎn)存純真IP數(shù)據(jù)庫的腳本分享

    Python實(shí)現(xiàn)一個(gè)轉(zhuǎn)存純真IP數(shù)據(jù)庫的腳本分享

    工作中我們常需要使用純真IP數(shù)據(jù)庫內(nèi)的數(shù)據(jù)做分析,下面這篇文章主要給大家介紹了利用Python如何實(shí)現(xiàn)一個(gè)轉(zhuǎn)存純真IP數(shù)據(jù)庫的相關(guān)資料,對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。
    2017-05-05
  • Python中%r和%s的詳解及區(qū)別

    Python中%r和%s的詳解及區(qū)別

    這篇文章主要介紹了Python中%r和%s的詳解及區(qū)別的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • pytorch?plt.savefig()的用法及保存路徑

    pytorch?plt.savefig()的用法及保存路徑

    這篇文章主要給大家介紹了關(guān)于pytorch?plt.savefig()的用法及保存路徑的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2022-01-01
  • 用python求一重積分和二重積分的例子

    用python求一重積分和二重積分的例子

    今天小編就為大家分享一篇用python求一重積分和二重積分的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • Python Multiprocessing多進(jìn)程 使用tqdm顯示進(jìn)度條的實(shí)現(xiàn)

    Python Multiprocessing多進(jìn)程 使用tqdm顯示進(jìn)度條的實(shí)現(xiàn)

    這篇文章主要介紹了Python Multiprocessing多進(jìn)程 使用tqdm顯示進(jìn)度條的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • 淺談pyhton學(xué)習(xí)中出現(xiàn)的各種問題(新手必看)

    淺談pyhton學(xué)習(xí)中出現(xiàn)的各種問題(新手必看)

    下面小編就為大家?guī)硪黄獪\談pyhton學(xué)習(xí)中出現(xiàn)的各種問題(新手必看)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-05-05
  • 淺談python爬蟲使用Selenium模擬瀏覽器行為

    淺談python爬蟲使用Selenium模擬瀏覽器行為

    這篇文章主要介紹了淺談python爬蟲使用Selenium模擬瀏覽器行為,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-02-02
  • Python中Numba庫裝飾器的具體使用

    Python中Numba庫裝飾器的具體使用

    Numba是一個(gè)針對(duì)Python的開源JIT編譯器,使用Numba非常方便,只需要在Python原生函數(shù)上增加一個(gè)裝飾器,本文主要介紹了Python中Numba庫裝飾器的具體使用,感興趣的可以了解一下
    2024-01-01

最新評(píng)論

绥化市| 郴州市| 磐石市| 隆尧县| 延庆县| 金寨县| 琼海市| 玛沁县| 苗栗市| 新乐市| 金秀| 新宾| 时尚| 涿鹿县| 陵水| 五峰| 垫江县| 屯昌县| 永吉县| 米林县| 金堂县| 怀来县| 大悟县| 武乡县| 上饶市| 吕梁市| 德安县| 太谷县| 峡江县| 遵义县| 曲周县| 余姚市| 盐池县| 白河县| 徐汇区| 西林县| 定安县| 象州县| 罗平县| 册亨县| 壤塘县|