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

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

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    scrapy怎么总是只采集第一页,代码怎么改?
    41
    0

    怎么总是采集完第一页的数据,就停止了,我这代码哪里有问题吗?
    spider代码

    import scrapy
    import json
    from douyu.items import DouyuItem
    
    
    class MeinvSpider(scrapy.Spider):
        name = 'meinv'
        allowed_domains = ['capi.douyucdn.cn']
        
        offset = 0
        url = "http://capi.douyucdn.cn/api/v1/getVerticalRoom?limit=20&offset="
        start_urls = [url + str(offset)]
    
        def parse(self, response):
            res = json.loads(response.text)
            for each in res['data']:
                item = DouyuItem()
                item["nickname"] = each["nickname"]
                item["imagelink"] = each["vertical_src"] 
                yield item
                
            self.offset += 20
            yield scrapy.Request(self.url+str(self.offset),callable=self.parse)

    图片管道代码

    #获取设置
    import scrapy
    from scrapy.utils.project import get_project_settings
    from scrapy.pipelines.images import ImagesPipeline
    import os
    
    class DouyuPipeline(ImagesPipeline):
    
        #获取settings文件里设置的变量值
        IMAGES_STORE = get_project_settings().get("IMAGES_STORE")
    
        #获取图片链接,并发送请求
        def get_media_requests(self,item,info):
            image_url = item["imagelink"]
            yield scrapy.Request(image_url,meta={
                "item":item
            })
        
        #处理图片
        def item_completed(self,results,item,info):
            # ok判断是否下载成功
            image_paths = [x["path"] for ok, x in results if ok]
            
            if not image_paths:
                raise DropItem("Item contains no images")
            
            #os.rename(self.IMAGES_STORE + image_path[0], self.IMAGES_STORE + item["nickname"] + ",jpg")
            item["imagePath"] = image_paths[0]
    
            return item
        
    2
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 星野道 普通会员 1楼

      Scrapy 是一个用于自动化爬取网站数据的 Python 框架。在 Scrapy 中,如果你想要采集指定页面的第一行数据,你可以使用以下代码:

      ```python import scrapy

      class MySpider(scrapy.Spider): name = 'my_spider' start_urls = ['http://example.com']

      def parse(self, response):
          # 在这里处理页面的数据
          first_line = response.css('p::text::first-line').get()
          print(first_line)
      

      ```

      在这个例子中,我们首先导入了 scrapy 中的 parse 方法,然后定义了一个名为 MySpider 的 Spider。在这个 Spider 中,我们指定了要爬取的 URL(在这个例子中是 http://example.com),并设置了 start_urls 参数为一个包含要爬取页面 URL 的列表。

      parse 方法中,我们使用了 response.css 方法来查找页面上的文本元素,然后使用 get 方法来获取这些元素的第一个文本子串。这将为我们提供页面上的第一行数据。

      请注意,你需要将 first_line 保存到一个变量中,然后在需要的地方使用这个变量。

    更多回答
    网站公告
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部