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

使用scrapy實現(xiàn)爬網(wǎng)站例子和實現(xiàn)網(wǎng)絡(luò)爬蟲(蜘蛛)的步驟

 更新時間:2014年01月23日 10:18:16   作者:  
本文分二個示例,第一個是個簡單的爬網(wǎng)站的小例子,第二個例子實現(xiàn)目是從一個網(wǎng)站的列表頁抓取文章列表,然后存入數(shù)據(jù)庫中,數(shù)據(jù)庫包括文章標題、鏈接、時間,大家參考使用吧

復(fù)制代碼 代碼如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from scrapy.selector import Selector

from cnbeta.items import CnbetaItem
class CBSpider(CrawlSpider):
    name = 'cnbeta'
    allowed_domains = ['cnbeta.com']
    start_urls = ['http://m.fzitv.net']

    rules = (
        Rule(SgmlLinkExtractor(allow=('/articles/.*\.htm', )),
             callback='parse_page', follow=True),
    )

    def parse_page(self, response):
        item = CnbetaItem()
        sel = Selector(response)
        item['title'] = sel.xpath('//title/text()').extract()
        item['url'] = response.url
        return item



實現(xiàn)蜘蛛爬蟲步驟

1.實例初級目標:從一個網(wǎng)站的列表頁抓取文章列表,然后存入數(shù)據(jù)庫中,數(shù)據(jù)庫包括文章標題、鏈接、時間

首先生成一個項目:scrapy startproject fjsen
先定義下items,打開items.py:

我們開始建模的項目,我們想抓取的標題,地址和時間的網(wǎng)站,我們定義域為這三個屬性。這樣做,我們編輯items.py,發(fā)現(xiàn)在開放目錄目錄。我們的項目看起來像這樣:

復(fù)制代碼 代碼如下:

from scrapy.item import Item, Field
class FjsenItem(Item):
    # define the fields for your item here like:
    # name = Field()
    title=Field()
    link=Field()
    addtime=Field()

第二步:定義一個spider,就是爬行蜘蛛(注意在工程的spiders文件夾下),他們確定一個初步清單的網(wǎng)址下載,如何跟隨鏈接,以及如何分析這些內(nèi)容的頁面中提取項目(我們要抓取的網(wǎng)站是http://www.fjsen.com/j/node_94962.htm 這列表的所有十頁的鏈接和時間)。
新建一個fjsen_spider.py,內(nèi)容如下:

復(fù)制代碼 代碼如下:

#-*- coding: utf-8 -*-
from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector
from fjsen.items import FjsenItem
class FjsenSpider(BaseSpider):
    name="fjsen"
    allowed_domains=["fjsen.com"]
    start_urls=['http://www.fjsen.com/j/node_94962_'+str(x)+'.htm' for x in range(2,11)]+['http://www.fjsen.com/j/node_94962.htm']
    def parse(self,response):
        hxs=HtmlXPathSelector(response)
        sites=hxs.select('//ul/li')
        items=[]
        for site in sites:
            item=FjsenItem()
            item['title']=site.select('a/text()').extract()
            item['link'] = site.select('a/@href').extract()
            item['addtime']=site.select('span/text()').extract()
            items.append(item)
        return items                 

name:是確定蜘蛛的名稱。它必須是獨特的,就是說,你不能設(shè)置相同的名稱不同的蜘蛛。
allowed_domains:這個很明顯,就是允許的域名,或者說爬蟲所允許抓取的范圍僅限這個列表里面的域名。
start_urls:是一個網(wǎng)址列表,蜘蛛會開始爬。所以,第一頁將被列在這里下載。隨后的網(wǎng)址將生成先后從數(shù)據(jù)中包含的起始網(wǎng)址。我這里直接是列出十個列表頁。
parse():是蜘蛛的一個方法,當(dāng)每一個開始下載的url返回的Response對象都會執(zhí)行該函數(shù)。
這里面,我抓取每一個列表頁中的<ul>下的<li>下的數(shù)據(jù),包括title,鏈接,還有時間,并插入到一個列表中


第三步,將抓取到的數(shù)據(jù)存入數(shù)據(jù)庫中,這里就得在pipelines.py這個文件里面修改了

復(fù)制代碼 代碼如下:

# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
from os import path
from scrapy import signals
from scrapy.xlib.pydispatch import dispatcher
class FjsenPipeline(object):

    def __init__(self):
        self.conn=None
        dispatcher.connect(self.initialize,signals.engine_started)
        dispatcher.connect(self.finalize,signals.engine_stopped)
    def process_item(self,item,spider):
        self.conn.execute('insert into fjsen values(?,?,?,?)',(None,item['title'][0],'http://m.fzitv.net/'+item['link'][0],item['addtime'][0]))
        return item
    def initialize(self):
        if path.exists(self.filename):
            self.conn=sqlite3.connect(self.filename)
        else:
            self.conn=self.create_table(self.filename)
    def finalize(self):
        if self.conn is not None:
            self.conn.commit()
            self.conn.close()
            self.conn=None
    def create_table(self,filename):
        conn=sqlite3.connect(filename)
        conn.execute("""create table fjsen(id integer primary key autoincrement,title text,link text,addtime text)""")
        conn.commit()
        return conn

這里我暫時不解釋,先繼續(xù),讓這個蜘蛛跑起來再說。

第四步:修改setting.py這個文件:將下面這句話加進去

復(fù)制代碼 代碼如下:

ITEM_PIPELINES=['fjsen.pipelines.FjsenPipeline']

接著,跑起來吧,執(zhí)行:

復(fù)制代碼 代碼如下:

scrapy crawl fjsen

就會在目前下生成一個data.sqlite的數(shù)據(jù)庫文件,所有抓取到的數(shù)據(jù)都會存在這里。

相關(guān)文章

  • 使用Python和Scribus創(chuàng)建一個RGB立方體的方法

    使用Python和Scribus創(chuàng)建一個RGB立方體的方法

    這篇文章主要介紹了使用Python和Scribus創(chuàng)建一個RGB立方體的方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • numpy數(shù)組合并和矩陣拼接的實現(xiàn)

    numpy數(shù)組合并和矩陣拼接的實現(xiàn)

    這篇文章主要介紹了numpy數(shù)組合并和矩陣拼接的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • python框架flask表單實現(xiàn)詳解

    python框架flask表單實現(xiàn)詳解

    這篇文章主要介紹了python框架flask表單實現(xiàn)詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-11-11
  • Django中模型Model添加JSON類型字段的方法

    Django中模型Model添加JSON類型字段的方法

    這篇文章主要介紹了Django中模型Model添加JSON類型字段的方法,實例分析了Python的Django框架模型使用技巧,需要的朋友可以參考下
    2015-06-06
  • Python?OpenCV中常用圖片處理函數(shù)小結(jié)

    Python?OpenCV中常用圖片處理函數(shù)小結(jié)

    在計算機視覺和圖像處理領(lǐng)域,OpenCV(Open?Source?Computer?Vision?Library)是一個非常強大和流行的開源庫,本文將介紹一些常用的OpenCV函數(shù),希望對大家有所幫助
    2024-03-03
  • python連接遠程ftp服務(wù)器并列出目錄下文件的方法

    python連接遠程ftp服務(wù)器并列出目錄下文件的方法

    這篇文章主要介紹了python連接遠程ftp服務(wù)器并列出目錄下文件的方法,實例分析了Python使用pysftp模塊的技巧,非常具有實用價值,需要的朋友可以參考下
    2015-04-04
  • python的重要技能輸入與輸出字符串格式化使用詳解

    python的重要技能輸入與輸出字符串格式化使用詳解

    這篇文章主要為大家介紹了python的重要技能輸入與輸出格式化使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-06-06
  • Python-OpenCV基本操作方法詳解

    Python-OpenCV基本操作方法詳解

    下面小編就為大家分享一篇Python-OpenCV基本操作方法詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • Python OpenCV實現(xiàn)裁剪并保存圖片

    Python OpenCV實現(xiàn)裁剪并保存圖片

    這篇文章主要為大家詳細介紹了Python OpenCV實現(xiàn)裁剪并保存圖片,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • 解決ImportError:DLL load failed while importing win32api:找不到指定的模塊

    解決ImportError:DLL load failed while impo

    在安裝pywin32后,可能會出現(xiàn)無法導(dǎo)入win32api的錯誤,一個有效的解決方案是運行pywin32_postinstall.py腳本,首先,打開cmd并切換到環(huán)境的Scripts文件夾,確保存在pywin32_postinstall.py文件
    2024-09-09

最新評論

金堂县| 陇南市| 临夏市| 红原县| 宽甸| 自贡市| 且末县| 宣汉县| 尖扎县| 武城县| 同德县| 六枝特区| 左权县| 西城区| 慈利县| 崇左市| 台中县| 会宁县| 巴彦淖尔市| 滦平县| 互助| 林甸县| 固阳县| 策勒县| 西盟| 循化| 图木舒克市| 富川| 临西县| 鄂伦春自治旗| 建昌县| 息烽县| 呼伦贝尔市| 沙雅县| 景德镇市| 新河县| 开封县| 扶余县| 通许县| 清水县| 内丘县|