Scrapy 豆瓣搜尋頁爬蟲

2021-10-10 18:51:01 字數 3588 閱讀 8086

使用scrapy爬蟲框架對豆瓣圖書搜尋結果進行爬取

scrapy是乙個為了爬取**資料,提取結構性資料而編寫的應用框架

可以應用在包括資料探勘,資訊處理或儲存歷史資料等一系列的程式

它提供了多種型別爬蟲的基類,如basespider、crawlspider等

scrapy框架主要由五大元件組成

排程器(scheduler)爬蟲(spider)

爬蟲,是使用者最關心的部份。使用者定製自己的爬蟲(通過定製正規表示式等語法),用於從特定的網頁中提取自己需要的資訊,即所謂的實體(item)。 使用者也可以從中提取出鏈結,讓scrapy繼續抓取下乙個頁面

實體管道(item pipeline)

實體管道,用於處理爬蟲(spider)提取的實體(item)

主要的功能是持久化實體、驗證實體的有效性、清除不需要的資訊

scrapy引擎(scrapy engine)

scrapy中的資料流由執行引擎控制,其過程如下:

引擎開啟乙個**,找到處理該**的spider並向該spider請求第乙個要爬取的url(s)

引擎從spider中獲取到第乙個要爬取的url並在排程器(scheduler)以request排程

引擎向排程器請求下乙個要爬取的url

spider處理response並返回爬取到的item及(跟進的)新的request給引擎

引擎將(spider返回的)爬取到的item給item pipeline,將(spider返回的)request給排程器

建立專案scrapy startproject ***建立爬蟲scrapy genspider ***(爬蟲名) ***.com (爬取域)生成檔案scrapy crawl *** -o ***.json (生成json/csv檔案)執行爬蟲scrapy crawl ***

列出所有爬蟲scrapy list

通過命令scrapy startproject tutorial建立乙個新的專案tutorial將會建立包含下列內容的tutorial目錄

tutorial/						

scrapy.cfg # 專案的配置檔案

tutorial/

# 該項目的python模組之後將在此加入**

__init__.py

items.py # 專案中的item檔案

pipelines.py # 專案中的pipelines檔案

settings.py # 專案的設定檔案

spiders/

# 放置spider**的目錄

__init__.py...

分析search_text 搜尋關鍵字

cat 搜尋類別

start 開始的條數

url規則可以適用到圖書電影搜尋頁面,後面的爬取也一樣

於是直接給出大佬的鏈結豆瓣讀書搜尋頁的window.__data__的解密

解決了這個問題其他的就很好爬取了

完整**見github倉庫

提取出的js在third_party/main.js

class

doubanbooksearchspider

(scrapy.spider)

: name =

'douban_book_search'

allowed_domains =

['douban.com'

]def

__init__

(self,keyword=

none

,start=

none

,*args,

**kwargs)

:super

(doubanbooksearchspider, self)

.__init__(

*args,

**kwargs)

self.keyword = keyword

self.start = start

)def

parse

(self, response)

: r = re.search(

'window.__data__ = "([^"]+)"'

, response.text)

.group(1)

# 匯入js

file_path = pathlib.path.cwd()/

'third_party/main.js'

with

open

(file_path,

'r', encoding=

'gbk'

)as f:

decrypt_js = f.read(

) ctx = execjs.

compile

(decrypt_js)

data = ctx.call(

'decrypt'

, r)

for item in data[

'payload'][

'items']:

if item.get(

'rating'

,none):

cover_url = item[

'cover_url'

] score = item[

'rating'][

'value'

] score_num = item[

'rating'][

'count'

] url = item[

'url'

] abstract = item[

'abstract'

] title = item[

'title']id

= item[

'id'

]yield doubanbooksearchitem(

cover_url=cover_url,

score=score,

score_num=score_num,

url=url,

abstract=abstract,

title=title,id=

id)

爬蟲框架scrapy個人總結(詳細)熟悉

架構概覽

scrapy爬蟲框架,入門案例(非常詳細)

豆瓣讀書搜尋頁的window.__data__的解密

python爬蟲之scrapy爬取豆瓣電影(練習)

開發環境 windows pycharm mongodb scrapy 任務目標 任務目標 爬取 豆瓣電影top250 將資料儲存到mongodb中。items.py檔案 coding utf 8 define here the models for your scraped items see d...

Scrapy框架抓取豆瓣電影的小爬蟲學習日記(三)

獲取到影片資訊之後,下一步就是要把獲取到的資訊進行儲存了。網上很多的案例都是儲存成json格式,這裡我想用mysql伺服器來儲存。1 首先安裝好mysql資料庫,建好filminfo表和字段。2 在items.py檔案中新增你需要儲存到資料庫中的資訊,定義相對應的class,生成item類物件。cl...

爬蟲教程 用Scrapy爬取豆瓣TOP250

文章首發於 guanngxu 的個人部落格 用scrapy爬取豆瓣top250 最好的學習方式就是輸入之後再輸出,分享乙個自己學習scrapy框架的小案例,方便快速的掌握使用scrapy的基本方法。本想從零開始寫乙個用scrapy爬取教程,但是官方已經有了樣例,一想已經有了,還是不寫了,盡量分享在網...