Scrapy中的POST請求發送和遞歸爬取


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)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM