scrapy結合redis進行增量式爬蟲

2021-10-23 08:31:02 字數 2790 閱讀 7410

增量式爬蟲:顧名思義就是以前爬取過的不在爬取,未爬取過的進行爬取。

需求:爬取中的動作電影的標題和簡介

分析:指定url, 建立工程,cd進入工程,建立爬蟲檔案,鏈結提取器提取頁碼鏈結,規則解析器進行規則制定,資料解析,持久化儲存,其實都是一樣的,重點在於怎麼只爬取更新的電影。

核心:檢測電影詳情頁的url之前是否爬取過

將爬取過的電影詳情頁url儲存

儲存到redis的set資料結構中(可以自動去重)

(redis資料庫表的清空命令:登入客戶端後:flushall)

檢視儲存的urls:smembers urls

檢視儲存的movieddata:lrange movieddata 0 -1

#主檔案

import scrapy

from scrapy.linkextractors import linkextractor

from scrapy.spiders import crawlspider, rule

from redis import redis

from moviepro.items import movieproitem

class

moviespider

(crawlspider)

: name =

'movie'

#allowed_domains = ['www.***.com']

start_urls =

['index.php/vod/show/id/5/page/1.html'

] rules =

( rule(linkextractor(allow=r'\d+.html'

), callback=

'parse_item'

, follow=

true),

)#建立redis連線物件

conn = redis(host=

'127.0.0.1'

,port=

6379

)#用於解析每乙個頁面中對應的電影詳情頁url

defparse_item

(self, response)

: li_list = response.xpath(

'/html/body/div[1]/div/div/div/div[2]/ul/li'

)for li in li_list:

detail_url =

''+li.xpath(

'./div/a/@href'

).extract_first(

)#將詳情頁的url存入redis的set中

ex = self.conn.sadd(

'urls'

,detail_url)

#urls為了進行對比

if ex==1:

print

('該url未被爬取過可進行資料的爬取'

)yield scrapy.request(url=detail_url,callback=self.detail_parse)

else

:print

('該url被爬取過 ,無資料可以爬取'

)def

detail_parse

(self,response)

: movie_name = response.xpath(

'/html/body/div[1]/div/div/div/div[2]/h1/text()'

).extract_first(

) jianjie = response.xpath(

'/html/body/div[1]/div/div/div/div[2]/p[5]/span[2]/text()'

).extract_first(

) jianjie =

''.join(jianjie)

item = movieproitem(

) item[

'movie_name'

]= movie_name

item[

'jianjie'

]= jianjie

yield item

#items

import scrapy

class

movieproitem

(scrapy.item)

:# define the fields for your item here like:

movie_name = scrapy.field(

) jianjie = scrapy.field(

)

#pipelines

class

moviepropipeline

(object):

conn =

none

defopen_spider

(self,spider)

: self.conn = spider.conn #連線物件在爬蟲檔案(spider)中已經建立過,直接呼叫

defprocess_item

(self, item, spider)

: dic =

print

(dic)

self.conn.lpush(

'movieddata'

,dic)

#儲存我們爬取的資料

return item

用scrapy進行網頁抓取

最近用scrapy來進行網頁抓取,對於pythoner來說它用起來非常方便,詳細文件在這裡 要想利用scrapy來抓取網頁資訊,需要先新建乙個工程,scrapy startproject myproject 工程建立好後,會有乙個myproject myproject的子目錄,裡面有item.py ...

用scrapy進行網頁抓取

最近用scrapy來進行網頁抓取,對於pythoner來說它用起來非常方便,詳細文件在這裡 要想利用scrapy來抓取網頁資訊,需要先新建乙個工程,scrapy startproject myproject 工程建立好後,會有乙個myproject myproject的子目錄,裡面有item.py ...

利用scrapy框架進行爬蟲

1.安裝2.用scrapy爬蟲四步走 第一步 編寫items.py 第二步 編寫spiders下的 py 檔案 第三步 編寫pipelines.py檔案 第四步 開啟settings.py 檔案更改配置 3.基於scrapy爬蟲框架,只需在命令列中輸入 scrapy startproject 命令,...