欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

selenium在scrapy中的使用代碼

 更新時(shí)間:2021年05月25日 09:02:29   作者:小黑班♪(・ω・)ノ  
本文給大家分享selenium在scrapy中的使用代碼,使用selenium可以很好的幫助我們獲取一些重要數(shù)據(jù)信息,本文通過(guò)代碼給大家詳細(xì)介紹,感興趣的朋友跟隨小編一起看看吧

在通過(guò)scrapy框架進(jìn)行某些網(wǎng)站數(shù)據(jù)爬取的時(shí)候,往往會(huì)碰到頁(yè)面動(dòng)態(tài)數(shù)據(jù)加載的情況發(fā)生,如果直接使用scrapy對(duì)其url發(fā)請(qǐng)求,是絕對(duì)獲取不到那部分動(dòng)態(tài)加載出來(lái)的數(shù)據(jù)值。但是通過(guò)觀察我們會(huì)發(fā)現(xiàn),通過(guò)瀏覽器進(jìn)行url請(qǐng)求發(fā)送則會(huì)加載出對(duì)應(yīng)的動(dòng)態(tài)加載出的數(shù)據(jù)。那么如果我們想要在scrapy也獲取動(dòng)態(tài)加載出的數(shù)據(jù),則必須使用selenium創(chuàng)建瀏覽器對(duì)象,然后通過(guò)該瀏覽器對(duì)象進(jìn)行請(qǐng)求發(fā)送,獲取動(dòng)態(tài)加載的數(shù)據(jù)值。本文重點(diǎn)給大家介紹selenium在scrapy中的使用,具體內(nèi)容如下所示:

使用目的

爬取網(wǎng)易新聞國(guó)內(nèi)、國(guó)際、軍事、航空4個(gè)版塊的新聞。在測(cè)試中發(fā)現(xiàn)各版塊的新聞是動(dòng)態(tài)加載的,如果直接爬取無(wú)法獲取,使用selenium幫助獲取此部分?jǐn)?shù)據(jù)。

代碼

spider

import scrapy
from selenium import webdriver
from wangyiPro.items import WangyiproItem

class WangyiSpider(scrapy.Spider):
    name = 'wangyi'
    # allowed_domains = ['www.xxx.com']
    start_urls = ['https://news.163.com/']
    model_url = []

   
    hro = webdriver.Chrome()

    def parse(self, response):
    # 從所有版塊中篩選出所需要下載的4個(gè)版塊
        li_list = response.xpath('/html/body/div[1]/div[1]/div[2]/div[2]/div[2]/div[2]/div/ul/li')
        indexs = [3,4,6,7]
        for index in indexs:
            model_li = li_list[index]
            model_list = model_li.xpath('./a/@href').extract_first()
            self.model_url.append(model_list)
        for url in self.model_url:
            yield scrapy.Request(url=url,callback=self.parse_model)

    # 數(shù)據(jù)解析:新聞標(biāo)題+新聞詳情頁(yè)的url(動(dòng)態(tài)加載數(shù)據(jù))
    def parse_model(self,response):
        # 直接對(duì)response解析無(wú)法獲取該數(shù)據(jù)(動(dòng)態(tài)加載數(shù)據(jù))
        # 無(wú)法拿到動(dòng)態(tài)加載數(shù)據(jù)返回的響應(yīng)數(shù)據(jù)就不足
        # 使用中間件修改不滿足需求的響應(yīng)對(duì)象中的響應(yīng)數(shù)據(jù),將其改為包含動(dòng)態(tài)加載數(shù)據(jù)的響應(yīng)數(shù)據(jù)
        div_list = response.xpath('/html/body/div/div[3]/div[4]/div[1]/div[1]/div/ul/li/div/div')
        for div in div_list:
            title = div.xpath('./div/div[1]/h3/a/text()').extract_first()
            new_url_detail = div.xpath('./div/div[1]/h3/a/@href').extract_first()

            if new_url_detail:
                item = WangyiproItem()
                item['title'] = title


                yield scrapy.Request(url=new_url_detail,callback=self.parse_detail,meta={'item':item})


    def parse_detail(self,response):
        # 返回的列表,需要將其轉(zhuǎn)換為字符串
        content = response.xpath('/html/body/div[3]/div[1]/div[3]/div[2]/p/text()').extract()
        content = ''.join(content)
        item = response.meta['item']
        item['content'] = content

        yield item

    # 重寫(xiě)爬蟲(chóng)類父類方法,該方法在爬蟲(chóng)程序執(zhí)行結(jié)束后立即執(zhí)行
    def closed(self,spider):
        # 打開(kāi)selenium需要關(guān)閉
        self.hro.quit()

middlewares

from time import sleep
from scrapy.http import HtmlResponse#scrapy封裝好的響應(yīng)類

class WangyiproDownloaderMiddleware:


    def process_request(self, request, spider):

        return None

    # 攔截所有的響應(yīng)對(duì)象
    # 整個(gè)工程發(fā)起的請(qǐng)求:1+4+n 對(duì)應(yīng)相同的響應(yīng)
    def process_response(self, request, response, spider):
        # 從所有攔截對(duì)象中找到4個(gè)需修改的響應(yīng)對(duì)象
        if request.url in spider.model_url:
            hro = spider.hro
            hro.get(request.url)
            sleep(2)
            # 網(wǎng)頁(yè)下拉到底,獲取更多動(dòng)態(tài)加載數(shù)據(jù)
            hro.execute_script('window.scrollTo(0,document.body.scrollHeight)')
            sleep(1)
            page_text = hro.page_source
            # response.text = page_text
            # 返回一個(gè)新的響應(yīng)對(duì)象
            return HtmlResponse(url=request.url,body=page_text,encoding='utf-8',request=request)

        # 如果不是需要修改的響應(yīng)數(shù)據(jù),不做修改
        else:
            return response

    def process_exception(self, request, exception, spider):

        pass

效果

在這里插入圖片描述

總結(jié)

  •  hro = webdriver.Chrome() 我是直接將Chromedriver寫(xiě)入配置文件,所以直接實(shí)例化對(duì)象即可,如果沒(méi)有寫(xiě)入配置文件,寫(xiě)為hro = webdriver.Chrome(executable_path='絕對(duì)路徑')。嘗試過(guò)將Chromedriver放到pycharm的文件下寫(xiě)入相對(duì)路徑,沒(méi)有成功。
  • 使用selenium在結(jié)束后需要關(guān)閉,可以改寫(xiě)爬蟲(chóng)類父類方法closed()
  • settings里修改三件套并且打開(kāi)下載中間件和items

以上就是selenium如何在scrapy中的使用的詳細(xì)內(nèi)容,更多關(guān)于scrapy中使用selenium的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • python爬蟲(chóng)使用requests發(fā)送post請(qǐng)求示例詳解

    python爬蟲(chóng)使用requests發(fā)送post請(qǐng)求示例詳解

    這篇文章主要介紹了python爬蟲(chóng)使用requests發(fā)送post請(qǐng)求示例詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • python中xlutils庫(kù)用法淺析

    python中xlutils庫(kù)用法淺析

    在本篇文章里小編給大家整理了一篇關(guān)于python中xluntils庫(kù)用法淺析的內(nèi)容,有需要的朋友們可以學(xué)習(xí)下。
    2020-12-12
  • python實(shí)現(xiàn)文件快照加密保護(hù)的方法

    python實(shí)現(xiàn)文件快照加密保護(hù)的方法

    這篇文章主要介紹了python實(shí)現(xiàn)文件快照加密保護(hù)的方法,涉及Python文件加密的技巧,可有效防止文件被篡改,需要的朋友可以參考下
    2015-06-06
  • python conda操作方法

    python conda操作方法

    這篇文章主要介紹了python conda操作方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-09-09
  • pycharm配置當(dāng)鼠標(biāo)懸停時(shí)快速提示方法參數(shù)

    pycharm配置當(dāng)鼠標(biāo)懸停時(shí)快速提示方法參數(shù)

    這篇文章主要介紹了pycharm中配置當(dāng)鼠標(biāo)懸停時(shí)快速提示方法參數(shù),本文圖文并茂給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-07-07
  • 最新評(píng)論