一.遞迴爬取解析多頁頁面資料
- 需求: 將糗事百科所有頁碼的作者和段子內容資料進行爬取且持久化儲存
- 需求分析: 每乙個頁面對應乙個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[注意] 該方法預設的實現,是對其實url發起get請求,如果想發起post請求,則需要子類重寫該方法.start_requests(self):
for u in
self.start_urls:
yield scrapy.request(url=u,callback=self.parse)
- 方法:重寫start_requests方法,讓其發起post請求:
defstart_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類 引數 同...