scrapy框架之遞迴解析和post請求

2022-08-01 10:15:09 字數 2655 閱讀 5393

一.遞迴爬取解析多頁頁面資料

- 需求: 將糗事百科所有頁碼的作者和段子內容資料進行爬取且持久化儲存

- 需求分析: 每乙個頁面對應乙個url,則scrapy工程需要對乙個頁面對應的url一次發起請求,然後通過對應的解析方法進行作者和段子內容的解析.

實現方案:

1.將每乙個頁碼對應的url存放到爬蟲檔案的起始url列表(start_urls)中.(不推薦)

2.用request方法手動發起請求.(推薦)

**展示:

']#爬取多頁

pagenum = 1 #

起始頁碼

url = '

page/%s/'#

每頁的url

defparse(self, response):

div_list=response.xpath('

//*[@id="content-left"]/div')

for div in

div_list:

#//*[@id="qiushi_tag_120996995"]/div[1]/a[2]/h2

author=div.xpath('

.//div[@class="author clearfix"]//h2/text()

').extract_first()

author=author.strip('\n'

) content=div.xpath('

.//div[@class="content"]/span/text()

').extract_first()

content=content.strip('\n'

) item=qiushibaikeitem()

item[

'author

']=author

item[

'content

']=content

yield item #

提交item到管道進行持久化

#爬取所有頁碼資料

if self.pagenum <= 13: #

一共爬取13頁(共13頁)

self.pagenum += 1url = format(self.url %self.pagenum)

#遞迴爬取資料:callback引數的值為**函式(將url請求後,得到的相應資料繼續進行parse解析),遞迴呼叫parse函式

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

二.五大核心元件工作流程

- 引擎(scrapy)

用來處理整個系統的資料流處理,觸發事務(框架核心)

- 排程器(scheduler)

- 爬蟲(spiders)

爬蟲主要是幹活的,用於從特定的網頁中提取自己需要的資訊,即所謂的實體(item).使用者也可以從中取出鍊錶,讓scrapy繼續抓取下乙個頁面

- 專案管道(pipline)

負責處理爬蟲從網頁中抽取的實體,主要的功能是持久化實體,驗證實體的有效性,清除不需要的資訊,當頁面被爬蟲解析後,將被傳送到專案管道,並經過幾個特定的次序處理資料.

三.post請求傳送

- 問題:在之前寫**中,我們從來沒有對start_url列表中儲存的起始url進行過請求的傳送,但是起始url的確是進行了請求的傳送,那這是如何實現的呢?

- 解答:其實是因為爬蟲問價中的爬蟲類繼承到了spider父類中的start_request(self)這個方法,該方法就可以對start_urls列表中的url發起請求:

def

start_requests(self):

for u in

self.start_urls:

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

[注意] 該方法預設的實現,是對其實url發起get請求,如果想發起post請求,則需要子類重寫該方法.

- 方法:重寫start_requests方法,讓其發起post請求:

def

start_requests(self):

#請求的url

post_url = '

'#post請求引數

formdata =

#傳送post請求

yield scrapy.formrequest(url=post_url, formdata=formdata, callback=self.parse)

爬蟲 scrapy框架之遞迴解析和post請求

概要 需求 將糗事百科所有頁碼的作者和段子內容資料進行爬取切持久化儲存 需求分析 每乙個頁面對應乙個url,則scrapy工程需要對每乙個頁碼對應的url依次發起請求,然後通過對應的解析方法進行作者和段子內容的解析。實現方案 1.將每乙個頁碼對應的url存放到爬蟲檔案的起始url列表 start u...

Scrapy框架解析

engine 1 控制所有模組之間的資料流 2 根據條件觸發事件 不需要使用者修改 scheduler對所有爬取請求進行排程管理 不需要使用者修改 middleware目的 事實engine scheduler和 之間進行使用者可配置的控制 功能 修改 丟棄 新增請求或響應 使用者可以編寫配置編碼 ...

scrapy 框架之post請求

通常 通過 實現對某些表單字段 如資料或是登入介面中的認證令牌等 的預填充。使用scrapy抓取網頁時,如果想要預填充或重寫像使用者名稱 使用者密碼這些表單字段,可以使用formrequest,可以使用 formrequest.from response 方法實現。formrequest類 引數 同...