scrapy入門二 分頁抓取文章入庫

2022-08-15 12:42:12 字數 3615 閱讀 4172

相關**:

#

-*- coding: utf-8 -*-

import

scrapy

from cnblogs.items import

articleitem

class

blogsspider(scrapy.spider):

name = '

blogs

'allowed_domains = ['

news.cnblogs.com']

start_urls = ['

']defparse(self, response):

articlelist=response.css('

.content')

for item in

articlelist:

#由於詳情頁裡瀏覽次數是js動態載入的,無法獲取,這裡需要傳遞過去

viewcount = item.css('

.view::text

').extract_first()[:-3].strip()

detailurl = item.css('

.news_entry a::attr(href)

').extract_first()

detailurl =response.urljoin(detailurl)

yield scrapy.request(url=detailurl, callback=self.parse_detail, meta=)

# text=response.css('

#sideleft > div.pager > a:last-child::text

').extract_first().strip()

if text=='

next >':

next = response.css('

#sideleft > div.pager > a:last-child::attr(href)

').extract_first()

url=response.urljoin(next)

yield scrapy.request(url=url,callback=self.parse)

##解析詳情頁內容

defparse_detail(self, response):

article=articleitem()

article[

'linkurl

']=response.url

article[

'title

']=response.css('

#news_title a::text

').extract_first()

article[

'img

'] = response.css('

#news_content img::attr(src)

').extract_first("

default.png")

article[

'source

'] = response.css('

.news_poster ::text

').extract_first().strip()

article[

'releasetime

'] = response.css('

.time::text

').extract_first()[3:].strip()

article[

'viewcount

']= response.meta["

viewcount"]

article[

'content

']=response.css('

#news_body

').extract_first(""

)

yield article

view code

寫入資料庫,先在setting.py頁面配置mongo連線資料資訊

robotstxt_obey =true

mongodb_host='

localhost

'mongo_port=27017mongo_dbname='

cnblogs

'mongo_docname='

article

'

修改pipelines.py頁面,相關**

#

-*- coding: utf-8 -*-

#define your item pipelines here##

don't forget to add your pipeline to the item_pipelines setting

#see:

import

pymongo

from scrapy.conf import

settings

from cnblogs.items import

articleitem

class

cnblogspipeline(object):

#初始化資訊

def__init__

(self):

host = settings['

mongodb_host']

port = settings['

mongo_port']

db_name = settings['

mongo_dbname']

client = pymongo.mongoclient(host=host, port=port)

db =client[db_name]

self.post=db[settings['

mongo_docname']]

##獲取值進行入庫

defprocess_item(self, item, spider):

article=dict(item)

self.post.insert(article)

return item

view code

__init__函式裡,獲取配置檔案裡的mongo連線資訊,連線mongo庫
process_item函式裡獲取blogs.py裡parse裡yield返回的每一行,然後將資料入庫

最後需要在setting取消注釋pipelines.py頁面執行的注釋,不修改(pipelines.py頁面**可能無法正常呼叫)

item_pipelines =

最後在terminal終端執行命令:scrapy crawl blogs

啟用後便會開始進行抓取,結束後開啟mongo客戶端工具:庫和表名建立的都是setting.py裡配置的

記憶體定址二 分頁

分頁單元 paging unit 把線性位址轉換成實體地址。其中乙個關鍵任務是把所請求的訪問型別與線性位址的訪問許可權相比較,如果這次記憶體訪問時無效的,就產生乙個缺頁異常。為了效率起見,線性位址被分成以固定長度為單位的組,稱為頁 page 頁內部連續的線性位址被對映到連續的實體地址中。這樣,核心可...

二分入門題

在乙個遞增的序列裡,查詢元素是否存在,若存在輸出yes,不存在輸出no.本題多組資料,首先輸入乙個數字n,然後輸入n個數,資料保證數列遞增,然後再輸入乙個查詢數字。若存在輸出yes,不存在輸出no.4 1 3 5 8 3 yes include include includeusing namesp...

二分基礎入門

二分查詢 又稱折半查詢,對排好序的陣列,每次取這個數和陣列中間的數進行比較,複雜度是 o logn 如 設陣列為 a n 查詢的數x,如果x a n 2 則返回 n 2 如果 x a n 2 則在 a 0 到a n 2 1 中進行查詢 如果x a n 2 則在a n 2 1 到a n 1 中進行查詢...