账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    scrapy 如何先滚动至底部 待网页内容全部加载完再返回response
    40
    0

    我现在爬取的网站 只显示20条数据 只有鼠标滚动到底部才能再显示20条 再滚动到底部 才能继续显示全部的60条数据

    我如何才能在scrapy中配合 selenium 达到这个效果? 先滚动到底部 待60条数据全部加载完成后 再返回response

    1
    打赏
    收藏
    点击回答
        全部回答
    • 共 0 条
    • Traveler过客 普通会员 1楼

      在Scrapy中,如果你想先滚动至底部并等待网页内容全部加载完再返回response,你可以使用response.follow和response.hook两个方法。

      首先,你需要在Scrapy的settings.py文件中添加PER%f(per page)设置,以指定每页的爬取长度。例如:

      python ITEM_PIPELINES = { 'scrapy.pipelines.Pipeline': 100, 'scrapy.pipelines.httpcache.HttpCacheStorage': 100, }

      然后,在你的爬虫中,你可以使用response.follow方法来跟随HTTP请求,这样就可以在每次请求后保存当前的网页状态。同时,你也可以使用response.hook方法来在请求完成后执行一些操作,例如滚动至底部。

      以下是一个示例:

      ```python import scrapy from scrapy.http import Response from scrapy.item import Item from scrapy.crawler import CrawlerProcess from scrapy.log import Log

      class MyItem(Item): url = scrapy.Field() content = scrapy.Field() timestamp = scrapy.Field()

      def parse(self, response):
          # 在这里添加你的解析代码,例如滚动至底部
          self.load_content(response)
          return response
      

      def load_content(response): # 在这里添加你的加载代码,例如获取所有页面 for page in response.css('div.items'): # 在这里添加你的内容处理代码 item = MyItem() item['url'] = page.css('a::attr(href)').get() item['content'] = page.css('div::attr(text').get()) item['timestamp'] = page.css('time::attr(src)').get() yield item ```

      在这个示例中,load_content函数会加载指定页面的所有内容,并返回一个包含所有信息的MyItem对象。在parse方法中,你可以添加你的内容处理代码。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部