zoukankan      html  css  js  c++  java
  • 利用scrapy框架爬取动态加载的数据

    在爬取有些网站的是后,数据不一定全部是可视化界面的,当我们拖动滚动条时才会加载其他的数据,如果我们也想爬取这部分数据,就需要使用selenium模块,在scrapy里可以结合该模块修改返回对象

    一、编写爬虫文件代码 

     1 import scrapy
     2 from selenium import webdriver
     3 from wangyi.items import WangyiItem
     4 
     5 
     6 class TestSpider(scrapy.Spider):
     7     name = 'test'
     8     # allowed_domains = ['www.xxx.com']
     9     start_urls = ['http://war.163.com/']
    10 
    11     def __init__(self):
    12         self.bro = webdriver.Chrome(executable_path=r'F:爬虫加数据练习第三天chromedriver.exe')
    13 
    14     def parse(self, response):
    15 
    16         div_list = response.xpath('//div[@class="data_row news_article clearfix "]')
    17         for div in div_list:
    18             item = WangyiItem()
    19             title = div.xpath('./div/div/h3/a/text()').extract_first()
    20             time = div.xpath('./div/div[2]/span/text()').extract_first()
    21             print(title)
    22             item['title'] = title
    23             item['time'] = time
    24             yield item
    25 
    26     def closed(self, spider):
    27         print('关闭浏览器对象!')
    28         self.bro.quit()

    注意,当创建完浏览器对象时,按照以前的写法,我们会直接的解析def parse 方法的返回值response来获取对象,很遗憾这里不是,因为我们要爬取的网页的数据是动态加载的,所有我们需要在middlewares.py文件改变他的返回对象response,所以说上面的response是我们改变之后的返回对象

    二、修改response对象

      在中间件里有两个类,SpiderMiddleware 和 DownloaderMiddleware,这里修改的是 DownloaderMiddleware 下的 def process_response,具体原理可以看看 scrapy 的五大核心组件

      修改代码
      

     1 from scrapy.http import HtmlResponse    
     2 def process_response(self, request, response, spider):
     3         # Called with the response returned from the downloader.
     4 
     5         # Must either;
     6         # - return a Response object
     7         # - return a Request object
     8         # - or raise IgnoreRequest
     9         bro = spider.bro
    10         bro.get(url=request.url)
    11         sleep(3)
    12         # 获取爬取的数据
    13         page_text = bro.page_source
    14         sleep(3)
    15 
    16         return HtmlResponse(url=spider.bro.current_url, body=page_text, encoding='utf8', request=request)

    spider 是爬虫文件的对象,spider.bro是初始化创建的浏览器对象,request.url 是起始地址 和下面的spider.bro.current_url 是同一个地址,最终返回修改后的response

    返回值后就可以对数据进行解析,获取对应的数据,

    三、将获取的数据做持久化存储,

      在前几篇介绍过,这里不重复写

    四、修改配置文件

    DOWNLOADER_MIDDLEWARES = {
       'wangyi.middlewares.WangyiDownloaderMiddleware': 543,
    }
  • 相关阅读:
    VBA的几个小Demo_2
    VBA的几个小Demo
    Django部署在阿里云服务器上
    python面试题及解析
    Django知识扩展
    Django文件下载2
    Django文件下载
    Django文件上传
    My_First_Web
    10个jQuery小技巧
  • 原文地址:https://www.cnblogs.com/liaopeng123/p/10467408.html
Copyright © 2011-2022 走看看