增量式爬蟲:顧名思義就是以前爬取過的不在爬取,未爬取過的進行爬取。
需求:爬取中的動作電影的標題和簡介
分析:指定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 命令,...