概要
- 需求:將糗事百科所有頁碼的作者和段子內容資料進行爬取切持久化儲存
- 需求分析:每乙個頁面對應乙個url,則scrapy工程需要對每乙個頁碼對應的url依次發起請求,然後通過對應的解析方法進行作者和段子內容的解析。
實現方案:
1.將每乙個頁碼對應的url存放到爬蟲檔案的起始url列表(start_urls)中。(不推薦)
2.使用request方法手動發起請求。(推薦)
**展示:
#爬取多頁
pagenum = 1 #起始頁碼
url = 'page/%s/' #每頁的url
def parse(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 += 1
url = format(self.url % self.pagenum)
#遞迴爬取資料:callback引數的值為**函式(將url請求後,得到的相應資料繼續進行parse解析),遞迴呼叫parse函式
yield scrapy.request(url=url,callback=self.parse)
- 問題:在之前**中,我們從來沒有手動的對start_urls列表中儲存的起始url進行過請求的傳送,但是起始url的確是進行了請求的傳送,那這是如何實現的呢?
- 解答:其實是因為爬蟲檔案中的爬蟲類繼承到了spider父類中的start_requests(self)這個方法,該方法就可以對start_urls列表中的url發起請求:
for u in self.start_urls:
yield scrapy.request(url=u,callback=self.parse)
【注意】該方法預設的實現,是對起始的url發起get請求,如果想發起post請求,則需要子類重寫該方法。
-方法: 重寫start_requests方法,讓其發起post請求:
#請求的url
post_url = ''
# post請求引數
formdata =
# 傳送post請求
yield scrapy.formrequest(url=post_url, formdata=formdata, callback=self.parse)
scrapy框架之遞迴解析和post請求
一.遞迴爬取解析多頁頁面資料 需求 將糗事百科所有頁碼的作者和段子內容資料進行爬取且持久化儲存 需求分析 每乙個頁面對應乙個url,則scrapy工程需要對乙個頁面對應的url一次發起請求,然後通過對應的解析方法進行作者和段子內容的解析.實現方案 1.將每乙個頁碼對應的url存放到爬蟲檔案的起始ur...
Python之scrapy框架爬蟲
scrapy命令詳解 可能是如今最全最簡單的scrapy命令解釋 明天上班,又要爬 現在每天做的工作有50 的時間爬 40 的時間清理資料,10 寫報告。若想自學資料分析,側重點很重要,我當初把大部分經歷放在了python的pandas numpymatplotlib上面,其他時間一部分放在sql身...
scrapy爬蟲框架之ImagePipeline
item pipeline item在spider中獲取後,將傳送到item pipeline中,執行對item的後續處理。每個item pipeline元件實現了簡單方法,它們接收item並執行一些操作,決定丟棄item還是讓其通過pipeline。item pipeline的作用 當然,你也可以...