欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用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://www.dbjr.com.cn']

    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():是蜘蛛的一個方法,當每一個開始下載的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://www.dbjr.com.cn/'+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正確讀取資源文件

    基于Python正確讀取資源文件

    這篇文章主要介紹了基于Python正確讀取資源文件,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-09-09
  • 利用Selenium添加cookie實現(xiàn)自動登錄的示例代碼(fofa)

    利用Selenium添加cookie實現(xiàn)自動登錄的示例代碼(fofa)

    這篇文章主要介紹了利用Selenium添加cookie實現(xiàn)自動登錄的示例代碼(fofa),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • Pycharm中安裝Pygal并使用Pygal模擬擲骰子(推薦)

    Pycharm中安裝Pygal并使用Pygal模擬擲骰子(推薦)

    這篇文章主要介紹了Pycharm中安裝Pygal并使用Pygal模擬擲骰子,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-04-04
  • Python演化計算基準函數(shù)詳解

    Python演化計算基準函數(shù)詳解

    這篇文章主要介紹了Python演化計算基準函數(shù),非常不錯,具有一定的參考借鑒價值,需要的朋友參考下吧,希望能夠給你帶來幫助
    2021-10-10
  • Python Json數(shù)據(jù)文件操作原理解析

    Python Json數(shù)據(jù)文件操作原理解析

    這篇文章主要介紹了Python Json數(shù)據(jù)文件操作原理解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-05-05
  • Python有關(guān)Unicode UTF-8 GBK編碼問題詳解

    Python有關(guān)Unicode UTF-8 GBK編碼問題詳解

    本文主要介紹了Python有關(guān)Unicode UTF-8 GBK編碼問題詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • 最新anaconda安裝配置教程

    最新anaconda安裝配置教程

    Anaconda是一個開源的Python發(fā)行版本,包括Conda、Python以及一大堆安裝好的工具包,比如:numpy、pandas等,這篇文章主要介紹了最新anaconda安裝配置教程,需要的朋友可以參考下
    2023-04-04
  • Windows環(huán)境下python環(huán)境安裝使用圖文教程

    Windows環(huán)境下python環(huán)境安裝使用圖文教程

    這篇文章主要為大家詳細介紹了Windows環(huán)境下python安裝使用圖文教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • python元類編程的基本使用

    python元類編程的基本使用

    本文主要介紹了python元類編程的基本使用,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • Python報錯:對象不存在此屬性的解決

    Python報錯:對象不存在此屬性的解決

    這篇文章主要介紹了Python報錯:對象不存在此屬性的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05

最新評論