日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

scrapy框架之递归解析和post请求

發布時間:2023/12/13 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 scrapy框架之递归解析和post请求 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

今日概要

  • 遞歸爬取解析多頁頁面數據
  • scrapy核心組件工作流程
  • scrapy的post請求發送

今日詳情

1.遞歸爬取解析多頁頁面數據

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

- 需求分析:每一個頁面對應一個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)

2.五大核心組件工作流程:

  • 引擎(Scrapy)
    用來處理整個系統的數據流處理, 觸發事務(框架核心)
  • 調度器(Scheduler)
    用來接受引擎發過來的請求, 壓入隊列中, 并在引擎再次請求的時候返回. 可以想像成一個URL(抓取網頁的網址或者說是鏈接)的優先隊列, 由它來決定下一個要抓取的網址是什么, 同時去除重復的網址
  • 下載器(Downloader)
    用于下載網頁內容, 并將網頁內容返回給蜘蛛(Scrapy下載器是建立在twisted這個高效的異步模型上的)
  • 爬蟲(Spiders)
    爬蟲是主要干活的, 用于從特定的網頁中提取自己需要的信息, 即所謂的實體(Item)。用戶也可以從中提取出鏈接,讓Scrapy繼續抓取下一個頁面
  • 項目管道(Pipeline)
    負責處理爬蟲從網頁中抽取的實體,主要的功能是持久化實體、驗證實體的有效性、清除不需要的信息。當頁面被爬蟲解析后,將被發送到項目管道,并經過幾個特定的次序處理數據。

3.post請求發送

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

- 解答:其實是因為爬蟲文件中的爬蟲類繼承到了Spider父類中的start_requests(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 = 'http://fanyi.baidu.com/sug' # post請求參數 formdata = { 'kw': 'wolf', } # 發送post請求 yield scrapy.FormRequest(url=post_url, formdata=formdata, callback=self.parse)

轉載于:https://www.cnblogs.com/presleyren/p/10579741.html

總結

以上是生活随笔為你收集整理的scrapy框架之递归解析和post请求的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。