POST請求發送
重寫爬蟲應用文件中繼承Spider類的 類的里面的start_requests(self)這個方法
def start_requests(self): #請求的url post_url = 'http://fanyi.baidu.com/sug' # post請求參數 formdata = { 'kw': 'wolf', } # 發送post請求 yield scrapy.FormRequest(url=post_url, formdata=formdata, callback=self.parse)
遞歸爬取
- 遞歸爬取解析多頁頁面數據
- 需求:將糗事百科所有頁碼的作者和段子內容數據進行爬取且持久化存儲
- 需求分析:每一個頁面對應一個url,則scrapy工程需要對每一個頁碼對應的url依次發起請求,然后通過對應的解析方法進行作者和段子內容的解析。
- 實現方案:
1.將每一個頁碼對應的url存放到爬蟲文件的起始url列表(start_urls)中。(不推薦)
2.使用Request方法手動發起請求。(推薦)
代碼:
# -*- coding: utf-8 -*- import scrapy from qiushibaike.items import QiushibaikeItem # scrapy.http import Request class QiushiSpider(scrapy.Spider): name = 'qiushi' allowed_domains = ['www.qiushibaike.com'] start_urls = ['https://www.qiushibaike.com/text/'] #爬取多頁 pageNum = 1 #起始頁碼 url = 'https://www.qiushibaike.com/text/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)
